SpringMVC层跟JSon结合,几乎不需要做什么配置,代码实现也相当简洁。再也不用为了组装协议而劳烦辛苦了!一、Spring注解@ResponseBody,@RequestBody和HttpMessageConverterSpring 3.X系列增加了新注解@ResponseBody,@RequestBody
-
@RequestBody将HTTP请求正文转换为适合的HttpMessageConverter对象。
-
@ResponseBody将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流。
HttpMessageConverter接口,需要开启<mvc:annotation-driven
/>。AnnotationMethodHandlerAdapter将会初始化7个转换器,可以通过调用AnnotationMethodHandlerAdapter的getMessageConverts()方法来获取转换器的一个集合
List<HttpMessageConverter>
引用
ByteArrayHttpMessageConverter
StringHttpMessageConverter
ResourceHttpMessageConverter
SourceHttpMessageConverter
XmlAwareFormHttpMessageConverter
Jaxb2RootElementHttpMessageConverter
MappingJacksonHttpMessageConverter
可以理解为,只要有对应协议的解析器,你就可以通过几行配置,几个注解完成协议——对象的转换工作!PS:Spring默认的json协议解析由Jackson完成。二、servlet.xml配置Spring的配置文件,简洁到了极致,对于当前这个需求只需要三行核心配置:
-
<context:component-scanbase-package="org.zlex.json.controller"/>
-
<context:annotation-config/>
-
<mvc:annotation-driven/>
三、pom.xml配置闲言少叙,先说依赖配置,这里以Json+Spring为参考:pom.xml
-
<dependency>
-
<groupId>org.springframework</groupId>
-
<artifactId>spring-webmvc</artifactId>
-
<version>3.1.2.RELEASE</version>
-
<type>jar</type>
-
<scope>compile</scope>
-
</dependency>
-
<dependency>
-
<groupId>org.codehaus.jackson</groupId>
-
<artifactId>jackson-mapper-asl</artifactId>
-
<version>1.9.8</version>
-
<type>jar</type>
-
<scope>compile</scope>
-
</dependency>
-
<dependency>
-
<groupId>log4j</groupId>
-
<artifactId>log4j</artifactId>
-
<version>1.2.17</version>
-
<scope>compile</scope>
-
</dependency>
主要需要spring-webmvc、jackson-mapper-asl两个包,其余依赖包Maven会帮你完成。至于log4j,我还是需要看日志嘛。包依赖图:至于版本,看项目需要吧!四、代码实现域对象:
-
publicclassPersonimplementsSerializable{
-
-
privateintid;
-
privateStringname;
-
privatebooleanstatus;
-
-
publicPerson(){
-
-
}
-
}
这里需要一个空构造,由Spring转换对象时,进行初始化。@ResponseBody,@RequestBody,@PathVariable控制器:
-
@Controller
-
publicclassPersonController{
-
-
-
-
-
-
-
-
@RequestMapping(value="/person/profile/{id}/{name}/{status}",method=RequestMethod.GET)
-
public@ResponseBody
-
Personporfile(@PathVariableintid,@PathVariableStringname,
-
@PathVariablebooleanstatus){
-
returnnewPerson(id,name,status);
-
}
-
-
-
-
-
-
-
-
@RequestMapping(value="/person/login",method=RequestMethod.POST)
-
public@ResponseBody
-
Personlogin(@RequestBodyPersonperson){
-
returnperson;
-
}
-
}
备注:@RequestMapping(value = "/person/profile/{id}/{name}/{status}",
method = RequestMethod.GET)中的{id}/{name}/{status}与@PathVariable
int id, @PathVariable String name,@PathVariable boolean status一一对应,按名匹配。这是restful式风格。如果映射名称有所不一,可以参考如下方式:
-
@RequestMapping(value="/person/profile/{id}",method=RequestMethod.GET)
-
public@ResponseBody
-
Personporfile(@PathVariable("id")intuid){
-
returnnewPerson(uid,name,status);
-
}
- GET模式下,这里使用了@PathVariable绑定输入参数,非常适合Restful风格。因为隐藏了参数与路径的关系,可以提升网站的安全性,静态化页面,降低恶意攻击风险。
- POST模式下,使用@RequestBody绑定请求对象,Spring会帮你进行协议转换,将Json、Xml协议转换成你需要的对象。
-
@ResponseBody可以标注任何对象,由Srping完成对象——协议的转换。
做个页面测试下:JS
-
$(document).ready(function(){
-
$("#profile").click(function(){
-
profile();
-
});
-
$("#login").click(function(){
-
login();
-
});
-
});
-
functionprofile(){
-
varurl='http://localhost:8080/spring-json/json/person/profile/';
-
varquery=$('#id').val()+'/'+$('#name').val()+'/'
-
+$('#status').val();
-
url+=query;
-
alert(url);
-
$.get(url,function(data){
-
alert("id:"+data.id+"\nname:"+data.name+"\nstatus:"
-
+data.status);
-
});
-
}
-
functionlogin(){
-
varmydata='{"name":"'+$('#name').val()+'","id":"'
-
+$('#id').val()+'","status":"'+$('#status').val()+'"}';
-
alert(mydata);
-
$.ajax({
-
type:'POST',
-
contentType:'application/json',
-
url:'http://localhost:8080/spring-json/json/person/login',
-
processData:false,
-
dataType:'json',
-
data:mydata,
-
success:function(data){
-
alert("id:"+data.id+"\nname:"+data.name+"\nstatus:"
-
+data.status);
-
},
-
error:function(){
-
alert('Err...');
-
}
-
});
Table
-
<table>
-
<tr>
-
<td>id</td>
-
<td><inputid="id"value="100"/></td>
-
</tr>
-
<tr>
-
<td>name</td>
-
<td><inputid="name"value="snowolf"/></td>
-
</tr>
-
<tr>
-
<td>status</td>
-
<td><inputid="status"value="true"/></td>
-
</tr>
-
<tr>
-
<td><inputtype="button"id="profile"value="Profile——GET"/></td>
-
<td><inputtype="button"id="login"value="Login——POST"/></td>
-
</tr>
-
</table>
四、简单测试Get方式测试:Post方式测试:五、常见错误POST操作时,我用$.post()方式,屡次失败,一直报各种异常:
引用
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
直接用$.post()直接请求会有点小问题,尽管我标识为json协议,但实际上提交的ContentType还是application/x-www-form-urlencoded。需要使用$.ajaxSetup()标示下ContentType。
-
functionlogin(){
-
varmydata='{"name":"'+$('#name').val()+'","id":"'
-
+$('#id').val()+'","status":"'+$('#status').val()+'"}';
-
alert(mydata);
-
$.ajaxSetup({
-
contentType:'application/json'
-
});
-
$.post('http://localhost:8080/spring-json/json/person/login',mydata,
-
function(data){
-
alert("id:"+data.id+"\nname:"+data.name
-
+"\nstatus:"+data.status);
-
},'json');
-
};
效果是一样!
分享到:
相关推荐
这篇“Spring注解学习手札(二)控制层梳理”主要聚焦于如何利用注解来构建和理解Spring MVC的控制层,即Controller。Spring MVC是Spring框架的一部分,专门用于处理Web应用程序的请求和响应。 一、@RestController...
在本篇《Spring注解学习手札(一)构建简单Web应用》中,我们将深入探讨如何使用Spring框架的注解来构建一个基本的Web应用程序。Spring框架是Java开发中的核心工具,尤其在企业级应用中广泛应用。它简化了依赖注入、...
【Spring注解学习手札】 在现代Java Web开发中,Spring框架因其强大的功能和灵活性而备受推崇。Spring注解的引入极大地简化了配置文件,提高了开发效率。本篇将聚焦于Spring MVC中的注解,通过构建一个简单的Web...
在本篇《Spring注解学习手札(四)持久层浅析》中,我们将深入探讨Spring框架在持久层的应用,特别是如何通过注解简化数据库操作。Spring作为一个强大的轻量级框架,提供了丰富的功能来处理数据访问,使得开发者可以...
在本篇《Spring注解学习手札(三)表单页面处理》中,我们将深入探讨Spring框架中关于处理Web表单的关键注解和技术。在实际的Web开发中,表单处理是用户交互的重要组成部分,Spring提供了强大的支持,使得开发者能够...
在本篇《Spring注解学习手札(六)——测试》中,我们将深入探讨Spring框架中的测试支持,尤其是如何利用注解进行单元测试和集成测试。Spring为开发者提供了丰富的注解,使得测试代码更加简洁、易读且易于维护。本文...
这篇“Spring注解学习手札(五)——业务层事务处理”深入探讨了如何使用注解来管理应用程序中的事务,确保数据的一致性和完整性。Spring提供了声明式事务管理,使得开发者无需编写繁琐的事务控制代码,只需在方法上...
这份"Perl学习手札"是为那些想要深入理解Perl语言特性和应用的初学者或有一定经验的开发者准备的宝贵资源。 首先,Perl的核心特性在于其灵活性和表达力。Perl语法受到了C、sed、awk等多种语言的影响,这使得它在...
- "spring-reference.pdf" 和 "Spring注解手札.pdf" 可能是详细的 Spring 参考文档和注解指南,对于深入学习 Spring 极为有用。 以上内容只是 Spring 框架的冰山一角,想要精通 Spring,还需要通过阅读文档、实践...
"Perl学习手札中文"是一份专为初学者设计的学习资料,旨在帮助读者快速掌握Perl语言的基础和高级特性。以下是对这些文件内容的概览: 1. **word.css**: 这个文件可能是样式表,用于定义文档中的排版和格式。在学习...
关于作者: 简信昌 “傲尔网”专案经理 博仲法律事务所资讯部门 台北Perl推广组 (Taipei.pm) 召集人 Newzilla召集人 目前专案: Open Source Foundry (OSSF) Newzilla 线上杂志 ...“Perl学习手札”
Perl学习手札.chmPerl学习手札.chmPerl学习手札.chm
hibernate学习手札.z03
hibernate学习手札.z01
### Perl学习手札知识点概述 #### 1. 关于Perl - **1.1 Perl的历史**:Perl由Larry Wall在1987年创建,旨在为文本处理提供一种更强大的工具。随着时间的发展,Perl逐渐成为了脚本编程领域的领导者之一。 - **1.2 ...
"高级Perl编程(黑豹书)"和"Perl_学习手札"这两本书籍是深入理解并掌握Perl编程的重要资源。 《高级Perl编程》(黑豹书)是Perl编程领域的经典之作,它不仅适合初学者作为进阶读物,也对有经验的Perl程序员提供了...
通过深入学习“Perl学习手札”,你可以系统地掌握这些概念,并逐步成长为一个熟练的Perl程序员。记住,实践是检验知识的最好方式,所以不仅要理解理论,还要动手编写代码,解决实际问题。祝你在Perl的学习之旅中取得...