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. Ubuntu 18.04 LTS 常见问题解决 2

    1 每次重启后都有system program problem detected sudo gedit /etc/default/apport 然后将打开的文件中的enabled=1改为0,原因暂时不 ...

  2. Codeforces Round #402 (Div. 2) C

    Description Igor found out discounts in a shop and decided to buy n items. Discounts at the store wi ...

  3. Codeforces Round #321 (Div. 2)

    水 A - Kefa and First Steps /************************************************ * Author :Running_Time ...

  4. h5-24-百度地图-地址解析

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. eclipse快捷键,移动和复制一段代码

    移动代码:alt+上或下箭头 复制加移动代码:ctrl + alt + 上或下箭头

  6. solr 统计中stats的一般用法

    //统计数据 根据查询条件 public String getStats(String ipName) { JSONObject obj; JSONArray pageArray = new JSON ...

  7. Hadoop的ChainMapper和ChainReducer使用案例(链式处理)(四)

    不多说,直接上干货!      Hadoop的MR作业支持链式处理,类似在一个生产牛奶的流水线上,每一个阶段都有特定的任务要处理,比如提供牛奶盒,装入牛奶,封盒,打印出厂日期,等等,通过这样进一步的分 ...

  8. Ionic开发-如何在ion-content形成上下结构 上面固定下层可滚动

    在一个系统设计中,一般有些需要固定位置,便利操作.现在我要做一个上下两层,需要固定上方,下方拉刷新数据. 页面: <ion-content scroll="false"> ...

  9. 借教室 线段树and二分

    描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望 ...

  10. 虚方法(virtual)

    虚方法(virtual) Virtual 关键字用于修饰方法.属性.索引器或事件声明,并且允许在派生类中重写这些对象. 看一段代码: using System ; class A { public v ...