0%

springMVC中的json数据转换

导入jar包

jackson-annotations-2.10.0.pr2.jar

jackson-core-2.10.0.pr2.jar

jackson-databind-2.10.0.pr2.jar

环境配置

1
2
3
4
5
6
7
8
   <!--处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
</list>
</property>
</bean>

如果使用注解驱动<mvc:annotation-driven />,则不需要上面的长串配置

两种方式

  • 请求数据为json,响应数据也是json
1
2
3
4
5
6
7
8
9
10
11
12
13
//传递给后台的是json数据
function requestJson(){
$.ajax({
type:'post',
url:'${pageContext.request.contextPath}/requestJson.action',
contentType:'application/json;charset=utf-8',
//数据格式是json串
data:'{"name":"王富贵","age":12}',
success:function( data){/ /返回json结果
alert(data);
}
});
}
  • 请求数据是key/value,响应数据是json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 请求key/value,输出是json
function responseJson(){
$.ajax({
type:'post',
url:'${pageContext.request.contextPath}/responseJson.action',
// 请求是key/value这里不需要指定contentType,因为默认就是key/value
// contentType:'application/json;charset=utf-8',
//数据格式是json串,商品信息
data:'name=王富贵&age=12',
success:function(data){/ /返回json结果
alert(data);
}
});
}

controller中的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Controller
public class JsonTest {
//请求json串(Student),输出json(Student)

//@RequestBody将请求的商品信息的json串转成Student对象

//@ResponseBody将Student转成json输出
@RequestMapping( "/requestJson")
public @ResponseBody Student requestJson(@RequestBody Student student){
//不做任何处理,接收之后转为对象再转为json
return Student;
}


//请求key/value,输出json
//@ResponseBody将itemsCustom转成json输出
@RequestMapping("/responseJson")
public @ResponseBody ItemsCustom responseJson(ItemsCustom itemsCustom){
//不做任何处理,接收之后直接将对象转为json
return itemsCustom;
}
}

返回数据乱码问题

java中文件

1
2
3
4
5
6
7
8
9
10
@RequestMapping("show")
@ResponseBody
public User show(){
System.out.println("接收load");
User user = new User();
user.setName("编号001");
user.setAge(12);
user.setSex("男");
return user;
}

使用ajax中的$(selector).load(url,data,function(resultDate){})获取数据填充到该选择器中

1
2
3
$("#btn1").click(function() {
$("#msg").load("show");
});

springmvc.xml配置文件中添加

1
2
3
4
5
6
7
8
9
10
11
12
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=utf-8</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>

注意事项

前台请求数据最终必须是json格式的字符串

如果是请求参数是对象,则可以使用JSON.stringify(data)方法转换

请求必须加上 contentType: "application/json",

后台使用对象接收 getJson(@RequestBody User user)

赏口饭吃吧!