Vì bạn đang sử dụng RequestBody
với một application/json
loại nội dung, Spring sẽ sử dụng MappingJackson2HttpMessageConverter
của nó để chuyển đổi JSON của bạn thành một đối tượng thuộc loại của bạn. Tuy nhiên, chuỗi ngày bạn cung cấp, 11/14
không khớp với bất kỳ mẫu ngày nào được định cấu hình trước và do đó nó không thể phân tích cú pháp chính xác. MappingJackson2HttpMessageConverter
, hoặc cụ thể hơn là ObjectMapper
thực hiện công việc, không biết gì về @DateTimeFormat
, chú thích mùa xuân.
Bạn sẽ cần cho Jackson biết bạn muốn sử dụng mẫu ngày nào. Bạn có thể làm như vậy với công cụ khử lưu ngày tùy chỉnh
public class CustomDateDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
SimpleDateFormat format = new SimpleDateFormat("MM/yy");
String date = jp.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new JsonParseException(e);
}
}
}
Sau đó, chỉ cần chú thích trường của bạn để Jackson biết cách giải mã hóa trường đó.
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;
Bạn có thể sử dụng @DateTimeFormat
nếu bạn đang sử dụng các tham số biểu mẫu được mã hóa url với @ModelAttribute
. Spring đăng ký một số bộ chuyển đổi có thể chuyển đổi giá trị Chuỗi từ tham số yêu cầu thành Date
sự vật. Điều này được mô tả trong deocumentation.