用Spring MVC和Jackson传递JSON的日期

时间:2014-02-02 01:35:05

标签: java json spring spring-mvc jackson

我有一个带有java.util.Date字段的类,我想将它从客户端传递给Spring控制器。每当我发出请求时,控制器都返回HTTP 415。我已尝试添加自定义序列化程序,如我能够找到的许多其他问题中所见。自定义序列化程序的工作原理是,我的控制器检索资源以自定义格式检索它们,但控制器不会确认JSON。如果我完全删除日期,控制器工作,所以我知道问题是在该字段。

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

控制器

@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控制器检索到的JSON(当我能让它工作时我会更准确)

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

2 个答案:

答案 0 :(得分:4)

你有一个序列化器,但没有反序列化器,所以它只能单向工作......

您还需要:

 @JsonDeserialize(using = DateDeserializer.class)

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

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

答案 1 :(得分:0)

而不是字符串,只需从jsp传递日期对象,如下所示。

var date = new Date();
var formData = {'date':date};

在dto中,创建java.util.Date类型的变量。