java - 使用 Spring MVC 和 Jackson 将日期作为 JSON 传递

标签 java json spring spring-mvc jackson

我有一个带有 java.util.Date 字段的类,我希望将其从客户端传递到 Spring Controller 。每当我发出请求时, Controller 都会返回 HTTP 415。我尝试添加自定义序列化器,如我找到的许多其他问题中所示。自定义序列化程序可以正常工作,因为我的检索资源的 Controller 以自定义格式检索它们,但 Controller 不会确认 JSON。如果我完全删除日期, Controller 就会工作,所以我知道问题出在该字段上。

理想情况下,我希望以默认的长表示形式接收它们,但我无法让 Controller 接受任何一种格式。

Controller

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<String> addEvent(ModelMap model, @RequestBody Event event)
{
    eventService.saveEvent(event);
    return new ResponseEntity<String>(HttpStatus.CREATED);
}

要序列化的类(省略了 getter 和 setter,尽管我也尝试了那里的注释。

public class Event implements Serializable
{

    private static final long serialVersionUID = -7231993649826586076L;

    private int eventID;

    private int eventTypeID;

    @JsonSerialize(using = DateSerializer.class)
    private Date date;

序列化器

private static final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");

@Override
public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
        throws IOException, JsonProcessingException {

    String formattedDate = dateFormat.format(date);

    gen.writeString(formattedDate);
}

以及我的 GET Controller 检索到的 JSON(当我可以让它正常工作时,我会更精确)

{"eventID":1,"eventTypeID":2,"date":"02-01-2014"}

最佳答案

您有一个序列化器,但没有反序列化器,因此它只能以一种方式工作......

您还需要:

 @JsonDeserialize(using = DateDeserializer.class)

(使用相同日期格式的 DateDeserializer)。

为什么两者没有一个界面对我来说是个谜:-)

关于java - 使用 Spring MVC 和 Jackson 将日期作为 JSON 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21505997/

相关文章:

java - Thymeleaf 中的模块化模板解析器

java - Windows Server 2003 JDBC 驱动程序

java - 如何调整 smartgwt 的 Listgrid 的行号列?

json - 在 PySpark 中有效地清理复杂 JSON 文件中的 HTML 实体

ios - 在 Xcode 中的谷歌地图上绘制两个协调之间的路线

java - 使用 Spring Security 的 Oauth2 请求 token

java - 递归翻转二叉树

java - TreeMap、HashMap 和 LinkedHashMap 的性能?

json - 如何在scala中解析HTTP请求返回的Json数据

java - Spring Rest Controller 的模拟主体