SpringMVC——JSON和JAVA交互
1、js和json相互转化:
json格式:{"":""}
所有这种大括号里面用双引号和冒号写的键值对,都是json。
// 将js转化为json对象
var json = JSON.stringify(user);
console.log(json);
// 将json对象转化为javascript
var js1 = JSON.parse(json);
console.log(js1);
2、步骤:
2.1 pom.xml中导入Jackson包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.3</version>
</dependency>
2.2 springmvc.xml中配置乱码问题
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
2.3 实体类
2.4 Controller,其中注意下面3中的@Controller、@ResponseBody、和@RestController的使用。
2、JSON乱码
出现了乱码问题,通过@RequestMaping的produces属性来实现:
//produces:指定响应体返回类型和编码
@RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")
但是我们一般不这么做,这样每一个controller上面都要配置,Spring有一个全能方法,一次性解决,在springmvc.xml中配置,死的!
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
3、@ResponseBody
添加后就不会走视图解析器,会直接返回一个字符串。
@Controller
public class UserController {
@RequestMapping(value = "/j1")
@ResponseBody
public String json1() throws JsonProcessingException {
return str;
}
}
一般来说,也可以用@RestController,那么这个类的所有方法都只会返回JSON字符串。
//@Controller
@RestController
public class UserController {
@RequestMapping(value = "/j1")
// @ResponseBody
public String json1() throws JsonProcessingException {
eturn str;
}
}