springmvc入门之使用json传递数据
1、添加依赖
1 <dependency> 2 <groupId>com.fasterxml.jackson.core</groupId> 3 <artifactId>jackson-databind</artifactId> 4 <version>2.10.0</version> 5 </dependency>
2、解决json乱码问题:
1 <!-- json 编码过滤器--> 2 <mvc:annotation-driven> 3 <mvc:message-converters register-defaults="true"> 4 <bean class="org.springframework.http.converter.StringHttpMessageConverter"> 5 <constructor-arg value="UTF-8"/> 6 </bean> 7 <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 8 <property name="objectMapper"> 9 <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> 10 <property name="failOnEmptyBeans" value="false"/> 11 </bean> 12 </property> 13 </bean> 14 </mvc:message-converters> 15 </mvc:annotation-driven>
3、controller返回视图,RestController返回的时字符串,创建jsontest.html
注意:script标签必须成对出现,不能用单闭合标签形式
4、工具类JsonUtils
1 package com.han.utils; 2 3 import com.fasterxml.jackson.core.JsonProcessingException; 4 import com.fasterxml.jackson.databind.ObjectMapper; 5 import com.fasterxml.jackson.databind.SerializationFeature; 6 7 import java.text.SimpleDateFormat; 8 9 public class JsonUtils { 10 11 public static String getDateJson(Object object,String dateFormat){ 12 13 ObjectMapper mapper=new ObjectMapper(); 14 //不使用时间戳的方式 15 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false); 16 //自定义日期的格式 17 SimpleDateFormat sdf=new SimpleDateFormat(dateFormat); 18 mapper.setDateFormat(sdf); 19 20 try { 21 return mapper.writeValueAsString(object); 22 } catch (JsonProcessingException e) { 23 e.printStackTrace(); 24 } 25 return null; 26 27 } 28 }
5、后端返回的json时间,前端页面显示404,消息显示"2022-04-18 21:52:47".jsp

解析器默认返回的是视图,所以在返回的字符串后面自动添加了“.jsp”,从而导致报错404
解决办法:
方法一:在方法体上添加@ResponseBody注解
1 @RequestMapping("/json4") 2 @ResponseBody 3 public String json4() throws JsonProcessingException { 4 5 ObjectMapper mapper = new ObjectMapper(); 6 7 //不使用时间戳的方式 8 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); 9 //自定义日期格式对象 10 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 11 //指定日期格式 12 mapper.setDateFormat(sdf); 13 Date date = new Date(); 14 String str = mapper.writeValueAsString(date); 15 16 return str; 17 }
方法二:将类上的@Controller替换为@RestController
在类上直接使用 @RestController 相当于@Controller+@ResponseBody,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,只返回对象,不能返回jsp,html页面,视图解析器会把所有返回的数据当作字符串处理。
@ResponseBody 注解的作用,是将 Controller 的方法返回的对象,通过适当的转换器转换为指定的格式之后,写入到HTTP 响应(Response)对象的 body 中,通常用来返回 JSON 或者 XML 数据,返回 JSON 数据的情况比较多。
注意:@Controller一般用于前后端不分离,需要返回视图的情况
@RestController用于前后端分离,后端返回json 或 XML 形式数据
6、使用fastjson
1 public String getFastJson(){ 2 Date date=new Date(); 3 return JSON.toJSONStringWithDateFormat(date,JSON.DEFFAULT_DATE_FORMAT); 4 }

浙公网安备 33010602011771号