gpt4 book ai didi

java - 通过 spring @RequestBody 将字符串时间存储在 sql.Time 中

转载 作者:行者123 更新时间:2023-11-30 07:08:53 25 4
gpt4 key购买 nike

我需要在后端存储时间(小时和分钟)。数据来自 json 格式的 UI,并具有以下 View “10:00”作为示例。在后端,我决定将这个时间保留为 sql.Time 类型。时间到了通过 spring @RequestBody 进行类并随之导致异常: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Instantiation of [simple type, class java.sql .Time]值失败:null(通过引用链:biz.models.CarWash[“firstShift”]);

如何通过@RequestBody注释将我的时间放入sql.Time字段中?将时间保留在 sql.Time 类型中并将其从 UI 以 json 形式发送为“10:00”是个好主意吗?

我的 Controller :

@RequestMapping(value = "/carwash/add", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8")
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public Long addCarWashPUT(@RequestBody CarWash carWash) throws ParseException {
System.out.println(carWash);
return 999L;
}

最佳答案

问题在于Jackson(默认在Spring MVC中使用)不知道如何转换“10:00”-> java.sql.Time,这并不明显。您可以定义自定义反序列化器来执行从字符串到 java 对象的转换:

public final class SqlTimeDeserializer extends JsonDeserializer<java.sql.Time> {

@Override
public java.sql.Time deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
String time = node.textValue();
return // convert java.sql.Time from string
}

....

}

要使用此解串器,只需输入

@JsonDeserialize(using = SqlTimeDeserializer.class)

CarWash 类中的firstShift 字段上方

关于java - 通过 spring @RequestBody 将字符串时间存储在 sql.Time 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39537074/

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