后台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字符串
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 让容器管理更轻松!