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     }

 

posted @ 2022-04-18 21:25  一个屏幕的低级码农  阅读(215)  评论(0)    收藏  举报