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格式数据的更多相关文章

  1. ajax接收遍历处理json格式数据

    ajax在前后端的交互中应用非常广泛,通过请求后台接口接收处理json格式数据展现在前端页面. 下面我们来简单用 ajax在本地做一个接收并处理json的小例子 首先我们要新建一个叫做data的jso ...

  2. 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_8 响应json数据之响应json格式数据

    springMvc的框架已经帮我们做好了.发过来的数据转换为javaBean对象 发过来的键值的形式,如果属性和javaBean对应的话,可以直接封装到对象中. key做额外的转换的时候,需要另外的j ...

  3. SpringMVC 实现返回一段数据 & 实现自动发送json格式数据 - AJAX

    实现返回一段数据 - AJAX 当页面通过AJAX来访问Controller时,期望得到的不是一个页面而是一段数据,此时可以使用如下方法,直接向相应中写入数据: /** * 直接向响应中写出数据,通常 ...

  4. ajax接收处理json格式数据

    ajax在前后端的交互中应用非常广泛,通过请求后台接口接收处理json格式数据展现在前端页面. 下面我们来简单用 ajax在本地做一个接收并处理json的小例子 首先我们要新建一个叫做data的jso ...

  5. SpringMvc+ajax 实现json格式数据传递

    传JSON对象 前端 function test () { var param = {username : "yitop"}; $.ajax({ timeout : 20000, ...

  6. springmvc通过ajax异步请求返回json格式数据

    jsp 首先创建index.jsp页面 <script type="text/javascript"> $(function () { $("#usernam ...

  7. play framework接收post请求json格式的参数

    大家在用play framework框架开发第三方调用你的接口的时候并且用json格式的参数post请求 ,参数接收是个问题 ,因为play对表单提交post请求有处理: 有两种方法: 1.直接形参列 ...

  8. js使用s:property标签接收json格式数据

    js使用s:property接收json数据时,会出现字符被转译的错误. 错误如下: 引号会被转译成'"'字符,导致解析不了. 错误原因: html的s:property接收不会出错,而js ...

  9. 存储过程接收JSON格式数据

    前端有可能一次性上传多笔记录,并使用JSON序列化. 现在在MS SQL Server 2016版本上,可以直接处理JSO数据. 如下面的前端序列化的数据: DECLARE @json_string ...

随机推荐

  1. hdu 3038 How Many Answers Are Wrong【带权并查集】

    带权并查集,设f[x]为x的父亲,s[x]为sum[x]-sum[fx],路径压缩的时候记得改s #include<iostream> #include<cstdio> usi ...

  2. robotframework自动化系列:登陆操作

    robotframework自动化系统:登录 robotframework对于编程能力比较弱的测试人员而言,真的是雪中送炭!我们可以使用robotframework根据之前完成的测试用例,一步步完善自 ...

  3. Django使用dwebsocket来通信,服务器报错[Error 10038]

    记录这次Django踩得最大的一次坑,没有之一.前前后后困扰了一周. 在使用Django的dwebsocket模块建立websocket时,不管是前端主动关闭,还是页面刷新,还是页面关闭.服务端均会报 ...

  4. 优先队列 HDOJ 5437 Alisha's Party

    题目传送门 题意:一人过生日,很多人排着队送礼物.排队顺序是礼物价值大的优先,如果相等先来的优先.有m次开门,当t个人到了会开门让p个人进门.最后一次让门外的所有人按顺序进门.有q次询问,问第x个进门 ...

  5. printf格式化输出参数

    1.类型 类型字符用以表示输出数据的类型,其格式符和意义如下表所示: 格式字符 意义 d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出前缀0) x,X 以十六进 ...

  6. 什么是Servlet容器?(分析很到位)

    在本文中,我写了一些关于Web服务器.Servlet容器以及它与JVM的关系的基本概念.我想表达的是,Servlet容器也仅仅不过是一个Java程序. 1. 什么是Web服务器? 想要知道什么是Ser ...

  7. 伟景行 citymaker 从入门到精通(1)——js开发,最基本demo,加载cep工程文件

    开发环境:citymaker 7(以下简称cm),jquery,easyui 1.4(界面),visual studio 2012(没有vs,不部署到IIS也行,html文件在本地目录双击打开可用) ...

  8. java8的lambda表达式,将List<DTO> 转为 List<DO>

    将List<PhoneDTO>转为List<PhoneDO>,通过java8的lambda表达式来操作,比传统的for循环精简很多: /** * List<PhoneDT ...

  9. fedora kde桌面系统配置

    本文向大家分享个人将fedora操作系统作为工作生活首选桌面系统的一些配置经验,系统版本与fedora最新版本保持一致,当前为fedora 25. #添加rpm源su -c 'dnf install ...

  10. 入门Promise的用法

    new Promise(function(resolve,reject){ resolve(); //数据处理完成 reject(); //数据处理出错 }).then(function A(){ / ...