【SpringMVC】09 对JSON的应用
前面JavaWeb的JSON回顾:
https://www.cnblogs.com/mindzone/p/12820877.html
上面的这个帖子我都还没有实际写进Servlet使用,要Mark一下了
我们配置一个演示的Bean
package cn.dai.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @author ArkD42 * @file SpringMVC * @create 2020 - 05 - 07 - 15:06 */ @Data @AllArgsConstructor @NoArgsConstructor public class Person { private String name; private Integer age; private Boolean gender; }
编写控制器
@Controller public class JsonController { @GetMapping("/json01") public String json01(Model model){ Person person = new Person("阿强", 22, true); model.addAttribute("msg",person.toString()); return "test"; } }
测试我们的响应结果是否会乱码
然后导入Maven坐标
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.0</version> </dependency>
使用Jackson
package cn.dai.controller; import cn.dai.pojo.Person; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import java.util.Arrays; /** * @author ArkD42 * @file SpringMVC * @create 2020 - 05 - 07 - 15:06 */ @Controller public class JsonController { @GetMapping("/json01") public String json01(Model model) throws JsonProcessingException { Person person = new Person("阿强", 22, true); ObjectMapper objectMapper = new ObjectMapper(); String s = objectMapper.writeValueAsString(person); model.addAttribute("msg", Arrays.toString(new String[]{s,"\n",person.toString()})); return "test"; } }
访问测试
注意要记得再Web包里面导入Jackson的依赖,
不然会出现找不到Bean异常
测试单个的JSON返回
也是没有问题的,不过这样我也就没有办法演示JSON乱码的问题了
针对JSON乱码的问题,可以使用一个Produces属性
是@RequestMapping注解中的属性
或者使用SpringMVC原生xml配置
Bean方式配置,如果无效,可以尝试放在注解驱动的外面
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd " > <!-- 目录扫描的方式注册Bean --> <context:component-scan base-package="cn.dai.controller" /> <!-- 默认的Servlet处理器 不处理静态资源--> <mvc:default-servlet-handler /> <!-- MVC 注解驱动支持--> <mvc:annotation-driven> <!-- 解决JSON乱码 --> <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> <!-- 视图解析器 --> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
对时间的JSON转换,这是使用LocalDateTime的API
@GetMapping("/json02") public String json02(Model model) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); LocalDateTime now = LocalDateTime.now(); System.out.println(now); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM); String format = dateTimeFormatter.format(now); String nows = objectMapper.writeValueAsString(now); objectMapper.writeValueAsString(format); model.addAttribute("msg", "时间转换测试"); model.addAttribute("now", now); model.addAttribute("nows", nows); model.addAttribute("format", format); /* 时间转换测试 2020-05-07T16:03:07.177 {"month":"MAY","year":2020,"dayOfYear":128,"dayOfMonth":7,"hour":16,"minute":3,"monthValue":5,"nano":177000000,"second":7,"dayOfWeek":"THURSDAY","chronology":{"id":"ISO","calendarType":"iso8601"}} 2020-5-7 */ return "time"; }
然后是原生Date & SimpleDateFormat
@GetMapping("/json03") public String json03(Model model) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format = simpleDateFormat.format(date); objectMapper.writeValueAsString(format); return "time"; }
Fastjson
Maven坐标
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.68</version> </dependency>
@GetMapping("/json04") public String json04(Model model) { String s = JSON.toJSONString(new Date()); model.addAttribute("msg", s); return "time"; }