我有一个带有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"}
答案 0 :(得分:4)
你有一个序列化器,但没有反序列化器,所以它只能单向工作......
您还需要:
@JsonDeserialize(using = DateDeserializer.class)
(使用相同日期格式的DateDeserializer)。
为什么两者都没有单一的界面对我来说是个谜: - )
答案 1 :(得分:0)
而不是字符串,只需从jsp传递日期对象,如下所示。
var date = new Date();
var formData = {'date':date};
在dto中,创建java.util.Date类型的变量。