我有一个带有 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/