gpt4 book ai didi

java - 客户端发送的请求在语法上使用@DateTimeFormat 是不正确的

转载 作者:行者123 更新时间:2023-11-29 04:22:30 25 4
gpt4 key购买 nike

我有一个 JSON 格式的字符串,我使用 HTTP-PUT 将其发送到带有 Spring MVC 和 Hibernate 的服务器。

Controller :

@RequestMapping(value = "/", method = RequestMethod.PUT)
public ResponseEntity<Map<String, Object>> myTest(
@RequestHeader("a") String a,
@RequestBody MyTestClass b) { … }

JSON:

{
"number":"123",
"test":"11/14"
}

test 是一个 java.util.Date(MySQL -> date),我这样注释 POJO:

@Column(name = "TEST")
@DateTimeFormat(pattern = "MM/yy")
private Date test;

所以test应该被格式化为月/年。但是我用 Firefox RESTClient 尝试过,我总是得到客户端发送的请求在语法上不正确。删除test,一切正常,按预期工作。

看来,@DateTimeFormat(pattern = "MM/yy") 有问题吗?

最佳答案

因为您正在使用 RequestBodyapplication/json 内容类型,Spring 将使用其 MappingJackson2HttpMessageConverter 将您的 JSON 转换为你的类型。但是,您提供的日期字符串 11/14 与任何预先配置的日期模式都不匹配,因此无法正确解析它。 MappingJackson2HttpMessageConverter,或者更具体地说,完成这项工作的 ObjectMapper,对 @DateTimeFormat 一无所知,这是一个 Spring 注释。

您需要告诉 Jackson 您想要使用哪种日期模式。您可以使用自定义日期反序列化器来执行此操作

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);
}
}
}

然后简单地注释您的字段,以便 Jackson 知道如何反序列化它。

@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;

如果您使用带有 @ModelAttribute 的 url 编码表单参数,则可以使用 @DateTimeFormat。 Spring 注册了一些转换器,可以将请求参数中的字符串值转换为 Date 对象。 This is described in the deocumentation.

关于java - 客户端发送的请求在语法上使用@DateTimeFormat 是不正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19897254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com