SpringMVC-06-JSON

  • JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式

  • 简洁和清晰的层次结构

  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率

JS中一切皆为对象,任何JS支持的类型都可以用JSON来表示

格式:

  • 对象使用{}

  • 数组使用[]

  • 所有的键值对都用 key:value

 var person={
     name:'mosang',
     age:20,
     sex:'男'
 }


 //将JS对象转换为JSON字符串
 var JSONperson = JSON.stringify(person);  //'{"name":"mosang","age":20,"sex":"男"}'
 // 将JSON字符串转换为JS对象
 var user = JSON.parse('{"name":"mosang","age":20,"sex":"男"}');
JSON本质上时一个字符串'{"name":"mosang","age":20,"sex":"男"}'

6.1、controller返回JSON数据

jackson是目前使用最广泛的json解析工具

1.导入依赖

 <dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.12.0</version>
 </dependency>

2.配置web.xml

 <!--注册servlet-->
 <servlet>
     <servlet-name>springmvc</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:springmvc.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
 </servlet>
 <!--拦截请求-->
 <servlet-mapping>
     <servlet-name>springmvc</servlet-name>
     <url-pattern>/</url-pattern>
 </servlet-mapping>
 <!--过滤器-->
 <filter>
     <filter-name>encoding</filter-name>
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
     <init-param>
         <param-name>encoding</param-name>
         <param-value>utf-8</param-value>
     </init-param>
 </filter>
 <filter-mapping>
     <filter-name>encoding</filter-name>
     <url-pattern>/*</url-pattern>
 </filter-mapping>

3.编写配置文件

 <context:component-scan base-package="com.mosang.controller"/>  
 ​
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <!--前缀-->
     <property name="prefix" value="/WEB-INF/jsp/"/>
     <!--后缀-->
     <property name="suffix" value=".jsp"/>
 ​
 </bean>

4.编写一个实体类

 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 public class User {
     private String name;
     private int age;
     private String sex;
 }

5.编写controller

 @Controller
 public class jsoncontroller {
 ​
     @RequestMapping("/json1")
     //正常情况下controller中的返回值是String的方法会通过视图解析器解析后跳转到指定页面,
     // 但是加入这个注解后,就不经过视图解析器而是直接返回一个字符串
     @ResponseBody
     public String json1(){
         User user=new User("mosang",20,"男");
         //tostring返回字符串
         return user.toString();
     }

 
 @RequestMapping(value = "/json2",produces = "text/plain;charset=UTF-8")//乱码问题
 @ResponseBody
 public String json2() throws JsonProcessingException {
     //json方式返回
     ObjectMapper mapper=new ObjectMapper();
     User user=new User("mosang",20,"男");
     String str=mapper.writeValueAsString(user);//把一个值变为字符串
     return str;
 }

 

使用JSON时,一般使用@RestController注解,其标记下的所有方法只返回字符串,不经过视图解析器

 @RestController
 public class jsoncontroller {

6.2、乱码问题

@RequestMapping中有一个内置方法:

设置其值即可

这种方法是很麻烦的,因为每有一个跳转,就要写一个produces

Spring提供了一种统一配置的方法:

在Spring配置文件上添加:

 <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>

6.3、日期格式

 @RequestMapping("/json3")
 public String json3() throws JsonProcessingException {
     ObjectMapper mapper=new ObjectMapper();
     Date date=new Date();
     return mapper.writeValueAsString(date);
 }

 

json的默认日期格式是从1970年一月一号0点开始到现在的毫秒数

传统java方式更改日期格式

使用SimpleDateFormat类自定义时间格式

 Date date=new Date();
 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");

 

JSON方式格式化输出

JSON默认将时间显示为时间戳格式

我们需要手动取消配置

 @RequestMapping("/json3")
 public String json3() throws JsonProcessingException {
     ObjectMapper mapper=new ObjectMapper();
     //取消时间戳配置
     mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
     SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
     //配置时间格式
     mapper.setDateFormat(sdf);
     Date date=new Date();
     return mapper.writeValueAsString(date);
 }

6.4、FastJSON

fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。实现json的转换方法很多,最后的实现结果都是一样的。

导入依赖:

 <dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.2.73</version>
 </dependency>

java对象与JSON对象的转换

     @RequestMapping("/json4")
     public String json4(){
         List<User> userList=new ArrayList<User>();
         User user1=new User("mosang1",20,"男");
         User user2=new User("mosang2",20,"男");
         User user3=new User("mosang3",20,"男");
         User user4=new User("mosang4",20,"男");
         userList.add(user1);
         userList.add(user2);
         userList.add(user3);
         userList.add(user4);
         //java对象转换成JSON字符串
         String jsonstr =JSON.toJSONString(userList);
         //JSON字符串转换为java对象
         User user= JSON.parseObject(jsonstr,User.class);
         return jsonstr;
 //        return user;
     }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值