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     }

 

posted @ 2023-03-08 16:53  回忆也交给时间  阅读(297)  评论(0)    收藏  举报