后台controller返回json对象----Jackson

1.我们使用Jackson

  应该是目前比较好的json解析工具了

2.导入Jackson的jar包

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

3.web-xml的配置,注册servlet,添加过滤器

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
        version="4.0">

   <!--1.注册servlet-->
   <servlet>
       <servlet-name>SpringMVC</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
       <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath:springmvc-servlet.xml</param-value>
       </init-param>
       <!-- 启动顺序,数字越小,启动越早 -->
       <load-on-startup>1</load-on-startup>
   </servlet>

   <!--所有请求都会被springmvc拦截 -->
   <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>

</web-app>
复制代码

4.配置springmvc-servlet.xml

复制代码
<?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
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 -->
    <context:component-scan base-package="com.chen.controller"/>
    <mvc:default-servlet-handler/>
    <mvc:annotation-driven/>
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>

</beans>
复制代码

5.实现User实体类

6.实现controller类

方法上面使用@ResponseBody  //写上这个注解,这个方法返回的字符串就不会提交给视图解析器了。和controller类的@@Controller配套使用
使用jackson实现controller类中返回json字符串!一个类ObjectMapper
使用这个ObjectMapper对象的              mapper.writeValueAsString(对象)  就可以把指定返回一个json字符串了
复制代码
@Controller
public class JSONcontroller {
    @RequestMapping("/j1")
    @ResponseBody  //写上这个注解,这个方法返回的字符串就不会提交给视图解析器了。和controller类的@@Controller配套使用
    public String j1() throws JsonProcessingException {
        User user = new User("陈1", 18, "男");
        ObjectMapper objectMapper = new ObjectMapper();
        String s = objectMapper.writeValueAsString(user);  //返回一个json字符串
        return s;
    }
}
复制代码

  测试:又遇到了烦人的乱码问题了!

 

 

   乱码解决办法:在springmvc的配置文件中添加StringHttpMessageConverter转换配置!以后使用json直接加上这段配置就好了!

复制代码
<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>
复制代码

 

 

7.扩展

  7.1上面的方法上面我们使用了@ResponseBody注解,我们每写一个返回json字符串的方法都要加一遍。

    这个@ResponseBody是配合@Controller一起使用的,实现方法返回的字符串不交给视图解析器解析

  7.2 我们可以使用@RestController注解作用在这个controller类上,代替@Controller注解,使得它这个类中的每个方法返回的字符串都不交给视图解析器

8.将集合返回json字符串到前台

复制代码
    @RequestMapping("/j2")
   //这个测试代码的controller类上面使用了@RestController。我们这就不使用@ResponseBody了
    public String j2() throws JsonProcessingException {
        List<User> list = new ArrayList<User>();
        User user1 = new User("陈1", 18, "男");
        User user2 = new User("陈2", 18, "男");
        User user3 = new User("陈3", 18, "男");

        list.add(user1);
        list.add(user2);
        list.add(user3);

        ObjectMapper objectMapper = new ObjectMapper();

        String liststring = objectMapper.writeValueAsString(list);
        return liststring;
    }
复制代码

  测试页面中括号表示集合

       

9.将日期转换为json字符串

  

 

   以上的原因是:Jackson 默认是会把时间转成timestamps形式

   我修改代码,让他不使用timestamps格式,直接把日期转换为自己想要的格式

  两种方式:

  

复制代码
    @RequestMapping("/j3")
    public String j3() throws JsonProcessingException {

        ObjectMapper mapper = new ObjectMapper();
        Date date = new Date();

        //自定义日期格式对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");


        //方法一:直接格式化日期格式并输出
        //String str = mapper.writeValueAsString(sdf.format(date));

        //方法二:设置ObjectMapper的默认时间戳格式为false,并设置他的格式为我们设置的格式要求
        //不使用默认时间戳格式
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        //指定日期格式
        mapper.setDateFormat(sdf);
        String str = mapper.writeValueAsString(date);

        
        return str;
    }
复制代码

  

10.将转换时间戳格式的方法抽取为工具类

复制代码
package com.chen.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

import java.text.SimpleDateFormat;

public class timeJsonUtil {

    public static String getJson(Object object) throws JsonProcessingException {
        return getJson(object,"yyyy-MM-dd HH:mm:ss");
    }
    public static String getJson(Object object,String dateFormat) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        //不使用时间差的方式
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        //自定义日期格式对象
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        //指定日期格式
        mapper.setDateFormat(sdf);
        try {
            return mapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
}
复制代码

  使用工具类实现时间转换为json字符串

  

 

 

 

 

  

  

  


 

 
posted @   qwedfrgh  阅读(786)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示