JackSon和FastJson
一.Jackson(使用最多)
- Jackson应该是目前较好的json解析工具了
- 当然不只这一个,还有阿里巴巴的FastJson等等;
- 这里我们使用jack需要导入它的jar包
1 <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> 2 <dependency> 3 <groupId>com.fasterxml.jackson.core</groupId> 4 <artifactId>jackson-databind</artifactId> 5 <version>2.14.1</version> 6 </dependency>
编写一个测试类:
1 @Controller 2 public class UserCon { 3 @RequestMapping("/t1") 4 @ResponseBody //这个注解会不依靠视图解析器,此方法就会返回一个字符串 5 public String test1() throws JsonProcessingException { 6 User user = new User(3, "msf", "男"); 7 ObjectMapper mapper = new ObjectMapper(); 8 String value = mapper.writeValueAsString(user); 9 return value; 10 } 11 }
这里我们需要引入一个新注解:@ResponseBody,这个注解的意思是,不会经过视图解析器,所以就会返回一个字符串,这个注解是配和@Controller一起使用的,我们既想让springMVC托管,又想返回一个字符串,就可以使用。
注意:
我们这里已经对spring配置了解决乱码的配置,但是前端依旧乱码了,因为这不是springmvc 的问题,而是前端JSON 的问题,所以,对于解决JSON的乱码问题,我们需要在spring的xml文件中配置一下

spring的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>
有了这个配置在spring的xml文件中,就可以很好的解决我们的乱码问题,注意看,我们的<bean>中的配置也有Jackson等字眼,所以这个配置是用来解决json的乱码的,和请求响应的乱码完全是两件事。

对于返回值为字符串给前端,我们在类上也有一个方法,@RestController,这个注解事加在类上的,标志整个类都是返回字符串给前端。
1 @RestController //此类中的所有请求都是返回一个字符串 2 public class UserCon2 { 3 @RequestMapping("/t2") 4 public String test1() throws JsonProcessingException { 5 ObjectMapper mapper = new ObjectMapper(); 6 List<User> userList = new ArrayList<User>(); 7 User user1 = new User(1, "mmm", "男"); 8 User user2 = new User(2, "m6m", "男"); 9 User user3 = new User(3, "m2m", "男"); 10 User user4 = new User(4, "m1", "男"); 11 userList.add(user1); 12 userList.add(user2); 13 userList.add(user3); 14 userList.add(user4); 15 return mapper.writeValueAsString(userList); 16 } 17 }

利用Jackson来输出时间:
编写一个控制类:
1 @RequestMapping("/t3") 2 public String test2() throws JsonProcessingException { 3 ObjectMapper mapper = new ObjectMapper(); 4 //使用mapper来控制输出,控制不为时间戳输出 5 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false); 6 7 // 定义时间格式 8 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 9 mapper.setDateFormat(sdf); 10 Date date = new Date(); 11 return mapper.writeValueAsString(date); 12 }
格式是Java原生态的DateFormat

二.FastJson(掌握)
fastjson.jar是阿里巴巴开发的一款专门用于Java开发的包,可以方便的实现json对象对JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换,实现json的转换方式有很多,最后的实现结果都是一样的。
fastjson的依赖:pom.xml
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.23</version>
</dependency>
fastjson的三个主要类:
- JSONObject 代表 json 对象
- JSONArray 代表 json 对象数组
- JSON代表JSONObject和JSONArray的转化
编写控制类:
1 @RequestMapping("/t4") 2 public String test3(){ 3 User user = new User(3, "mm", "男"); 4 List<User> users = new ArrayList<User>(); 5 users.add(user); 6 String user1 = JSON.toJSONString(users); 7 return user1; 8 }


浙公网安备 33010602011771号