Controller返回Json数据
Jackson是目前比较好的json解析工具了
我们这里使用Jackson,使用它需要导入它的jar包;
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.2</version>
</dependency>
编写一个User的实体类,然后去编写我们的测试Controller;
//需要导入lombok
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
private String sex;
}
这里我们需要两个新东西,一个是@ResponseBody,一个是ObjectMapper,我们看下具体的用法
@Controller
public class UserController {
@RequestMapping("/j1" )
@ResponseBody//增加饿了ResponseBody,他就不会走视图解析器,会直接返回一个字符串。
public String json1() throws JsonProcessingException {
//jackson.ObjectMapper
ObjectMapper mapper=new ObjectMapper();
//创建一个对象
User user=new User("张三",18,"男");
String str=mapper.writeValueAsString(user);
return str;
}
测试结果:
出现乱码问题。通过@RequestMapping的Produces属性解决乱码问题,修改代码如下。
@Controller
public class UserController {
@RequestMapping(value = "/j1" ,produces = "application/json;character=utf-8")
@ResponseBody//增加饿了ResponseBody,他就不会走视图解析器,会直接返回一个字符串。
public String json1() throws JsonProcessingException {
//jackson.ObjectMapper
ObjectMapper mapper=new ObjectMapper();
//创建一个对象
User user=new User("张三",18,"男");
String str=mapper.writeValueAsString(user);
return str;
}
再次测试,乱码问题解决。
代码优化
乱码问题统一解决:
上一种方法比较麻烦,如果项目中有许多请求则每一个都要添加,可以通过Spring配置统一指定,这样就不用每次都去处理了!
我们可以在springmvc的配置文件上添加一段消息StringHttpMessageConvert转换配置!
<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>
代码gitee云地址:jackson
注:本篇为狂神说Java的视频学习笔记,侵删。