用springmvc的@RequestBody和@ResponseBody 接收和响应json格式数据
1.controller
@Controller
@RequestMapping("/rest/v1")
public class WelcomeController {
@RequestMapping(value="/date/json/next",
method=RequestMethod.POST,consumes="application/json"
,produces="application/json")
@ResponseBody
public DateTime getNextDateJson(@RequestBody DateTime date)
{
date.getNowDate().setTime(
date.getNowDate().getTime());
return date;
}
}
2.请求参数类和返回类DateTime(DateTime原本是用来测试返回时间格式的,这里犯懒请求和返回都用同一个类)
package com.cici.example.view.domain; import java.sql.Timestamp; import com.cici.utils.TimestampSerializer;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; public class DateTime {
String name;
@JsonSerialize(using=TimestampSerializer.class)
Timestamp nowDate;
public Timestamp getNowDate() {
return nowDate;
}
public void setNowDate(Timestamp nowDate) {
this.nowDate = nowDate;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} }
启动Tomcat然后用chrome的postman或者Firefox的httprequester发送json参数的post请求,请求参数如下
{
"nowDate":"2016-7-8T16:33:15.687",
"name":"cc"
}
如果这时候返回415 unsupport media type,有可能是下面两个原因(具体配置在 maven构建springmvc项目 中有配置)
1)messageConverters没有配置支持application/json类型
2)pom.xml没有配置Jackson的依赖(fasterxml或者haus包)
这时候nowDate的Timestamp类型springmvc是无法解析的,请求会返回400 bad request
因为我用的Jackson包是fasterxml的,所以有两种解决方式(如果用haus可能会有三种)
1)在DateTime.java类的nowDate属性上加上一句@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"),不过这种方式需要在每个类的每个timestamp类型的属性上都配置过一次,不推荐这种方法
2)自定义一个converter,这种方式只需要配置一次,推荐这种方式
DateConverter.java
package com.cici.utils;
import java.sql.Timestamp;
import org.springframework.core.convert.converter.Converter;
public class DateConverter implements Converter<String,Timestamp>{
@Override
public Timestamp convert(String date) {
if(null != date)
{
return Timestamp.valueOf(date);
}
return null;
}
}
然后在dispatcher-servlet.xml配置
<!--这里是把conversion-service="conversionService"加到原来的annotation-driven-->
<mvc:annotation-driven conversion-service="conversionService"/> <bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.cici.utils.DateConverter" >
</bean>
</list>
</property>
</bean>
然鹅这时候response中的nowDate返回的还是long类型的时间戳,不是具体的时间,可以针对timestamp类型的属性写一个jsonserializer(这种方法需要每个属性都配置一次,但目前没找到更好的解决方法)
TimestampSerializer.java
package com.cici.utils; import java.io.IOException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat; import com.cici.example.view.domain.DateTime;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider; /**
* @author cc
* 为每个类写一个serializer
*/
public class TimestampSerializer extends JsonSerializer<Timestamp>{ @Override
public void serialize(Timestamp dateTime, JsonGenerator generator,
SerializerProvider provider) throws IOException,
JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String dateTimeFormated = sdf.format(dateTime);
generator.writeString(dateTimeFormated);
} }
然后在属性的getter方法上配置
@JsonSerialize(using=TimestampSerializer.class)
Timestamp nowDate;
public Timestamp getNowDate() {
return nowDate;
}
以上是踩到的两个坑
这个时候请求和返回如下

用json做请求体和响应体顺便处理Date类型返回Long类型时间戳问题的小李子就完成了
用springmvc的@RequestBody和@ResponseBody 接收和响应json格式数据的更多相关文章
- ajax接收遍历处理json格式数据
ajax在前后端的交互中应用非常广泛,通过请求后台接口接收处理json格式数据展现在前端页面. 下面我们来简单用 ajax在本地做一个接收并处理json的小例子 首先我们要新建一个叫做data的jso ...
- 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_8 响应json数据之响应json格式数据
springMvc的框架已经帮我们做好了.发过来的数据转换为javaBean对象 发过来的键值的形式,如果属性和javaBean对应的话,可以直接封装到对象中. key做额外的转换的时候,需要另外的j ...
- SpringMVC 实现返回一段数据 & 实现自动发送json格式数据 - AJAX
实现返回一段数据 - AJAX 当页面通过AJAX来访问Controller时,期望得到的不是一个页面而是一段数据,此时可以使用如下方法,直接向相应中写入数据: /** * 直接向响应中写出数据,通常 ...
- ajax接收处理json格式数据
ajax在前后端的交互中应用非常广泛,通过请求后台接口接收处理json格式数据展现在前端页面. 下面我们来简单用 ajax在本地做一个接收并处理json的小例子 首先我们要新建一个叫做data的jso ...
- SpringMvc+ajax 实现json格式数据传递
传JSON对象 前端 function test () { var param = {username : "yitop"}; $.ajax({ timeout : 20000, ...
- springmvc通过ajax异步请求返回json格式数据
jsp 首先创建index.jsp页面 <script type="text/javascript"> $(function () { $("#usernam ...
- play framework接收post请求json格式的参数
大家在用play framework框架开发第三方调用你的接口的时候并且用json格式的参数post请求 ,参数接收是个问题 ,因为play对表单提交post请求有处理: 有两种方法: 1.直接形参列 ...
- js使用s:property标签接收json格式数据
js使用s:property接收json数据时,会出现字符被转译的错误. 错误如下: 引号会被转译成'"'字符,导致解析不了. 错误原因: html的s:property接收不会出错,而js ...
- 存储过程接收JSON格式数据
前端有可能一次性上传多笔记录,并使用JSON序列化. 现在在MS SQL Server 2016版本上,可以直接处理JSO数据. 如下面的前端序列化的数据: DECLARE @json_string ...
随机推荐
- Luogu P1156 垃圾陷阱 【dp】By cellur925
题目传送门 这题...看上去浓浓的背包气息...但是并不好设计状态啊emmm. 我们考虑可能成为状态的量:高度.血量.时间.物品.看数据范围也猜到应该大概是个二维dp了w. 正确的状态设计之一:设$f ...
- Hexo瞎折腾系列(2) - 添加背景图片轮播
动态背景图片插件jquery-backstretch jquery-backstretch是一款简单的jQuery插件,可以用来设置动态的背景图片,以下是官方网站的介绍. A simple jQuer ...
- 洛谷 P2398 GCD SUM || uva11417,uva11426,uva11424,洛谷P1390,洛谷P2257,洛谷P2568
https://www.luogu.org/problemnew/show/P2398 $原式=\sum_{k=1}^n(k\sum_{i=1}^n\sum_{j=1}^n[(i,j)=k])$ 方法 ...
- CodeForces - 816C Karen and Game(简单模拟)
Problem Description On the way to school, Karen became fixated on the puzzle game on her phone! The ...
- 165 Compare Version Numbers 比较版本号
比较两个版本号 version1 和 version2.如果 version1 大于 version2 返回 1,如果 version1 小于 version2 返回 -1, 除此以外 返回 0.您可 ...
- A. The Fault in Our Cubes 暴力dfs
http://codeforces.com/gym/101257/problem/A 把它固定在(0,0, 0)到(2, 2, 2)上,每次都暴力dfs检查,不会超时的,因为规定在这个空间上,一不行, ...
- Keepalived+LVS(DR)+MySQL
实验环境 主机名 IP VIP 服务 主备 KA_LV_MYSQL_01 192.168.30.130 192.168.30.100 keepalived.LVS.MySQL MASTER KA_LV ...
- Web API性能优化(一)压缩
简单的应用场景:分页获取日志JSON信息. 很简单的实现,简单的记录一下 未压缩时候 使用PostMan请求http://localhost:34390/api/gpm/syslog/page?pag ...
- [转]深入浅出WPF(7)——数据的绿色通道,Binding
本文转自:http://liutiemeng.blog.51cto.com/120361/95273 小序: 怎么直接从2蹦到7啦?!啊哦,实在是不好意思,最近实在是太忙了,忙的原因也非常简单——自己 ...
- C#中Json的简单处理
命名空间:Windows.Data.Json在Windows Runtime中,可以使用Json类对获取的Json字符串进行操作,相比DataContractJsonSerializer类操作更加直观 ...