Jackson是目前比较好的解析工具
要使用Jackson,首先要导入它的jar包
导入maven依赖:
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.5</version>
</dependency>
编写controller方法:
@RequestMapping(value = "/j1",produces = "application/json;charset=utf-8")//produces解决json乱码问题
@ResponseBody//有这个注解就不会走视图解析器,直接返回一个字符串
public String json1() throws JsonProcessingException {
User user=new User(1,"小新",5);
ObjectMapper mapper=new ObjectMapper();
String s = mapper.writeValueAsString(user);
return s;
}
如果不写 produces = "application/json;charset=utf-8" 返回的json数据会有乱码问题
在类上将@Controller注解换成@RestController,类下的所有方法都不会走视图解析器
上面解决乱码问题比较麻烦,如果项目中有多个请求的话每一个方法都要添加,可以通过spring配置统一处理
在springmvc上的配置添加一段信息StringHttpMessageConverter,一次性解决中文乱码问题
<!-- JSON乱码问题配置 -->
<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>
json集合的输出:
@RequestMapping("j2")
@ResponseBody//有这个注解就不会走视图解析器,直接返回一个字符串
public String json2() throws JsonProcessingException {
List<User> userList= new ArrayList<>();
User user1=new User(1,"小王1",5);
User user2=new User(1,"小王2",5);
User user3=new User(1,"小王3",5);
User user4=new User(1,"小王4",5);
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
ObjectMapper mapper=new ObjectMapper();
String s = mapper.writeValueAsString(userList);
return s;
}
json时间的输出(Java方式):
@RequestMapping("/j3")
@ResponseBody//有这个注解就不会走视图解析器,直接返回一个字符串
public String json3() throws JsonProcessingException {
ObjectMapper mapper=new ObjectMapper();
//自定义日期格式
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
Date date=new Date();
//ObjectMapper时间解析后的默认格式为 timestamp时间戳
return mapper.writeValueAsString(simpleDateFormat.format(date));
}
json时间的输出(ObjectMapper方式):
@RequestMapping("/j4")
@ResponseBody//有这个注解就不会走视图解析器,直接返回一个字符串
public String json4() throws JsonProcessingException {
ObjectMapper mapper=new ObjectMapper();
Date date=new Date();
//不使用时间戳的方式
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
//自定义日期格式
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
mapper.setDateFormat(simpleDateFormat);
//ObjectMapper时间解析后的默认格式为 timestamp时间戳
return mapper.writeValueAsString(date);
}
编写JsonUtils工具类,简化代码:
package com.huang.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.text.SimpleDateFormat;
public class JsonUtils {
public static String getJson(Object object) throws JsonProcessingException {
ObjectMapper mapper=new ObjectMapper();
return getJson(object,"yyyy-MM-dd HH-mm-ss");
}
public static String getJson(Object object,String dateFormat) throws JsonProcessingException {
ObjectMapper mapper=new ObjectMapper();
//不使用时间戳的方式
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
//自定义日期格式
SimpleDateFormat simpleDateFormat=new SimpleDateFormat(dateFormat);
mapper.setDateFormat(simpleDateFormat);
return mapper.writeValueAsString(object);
}
}