【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";
    }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号