我需要在后端存储时间(小时和分钟)。数据来自json中的UI,并具有以下视图" 10:00"作为expamle。在后端,我决定将这段时间保留在sql.Time
类型中。到了春季上课的时间@RequestBody
并且随后导致异常:org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Instantiation of [simple type, class java.sql.Time] value failed: null (through reference chain: biz.models.CarWash["firstShift"]);
如何通过@RequestBody
注释将我的时间放在sql.Time字段中?
在sql.Time
类型中保留时间并将其从json中的UI发送为" 10:00" ?
我的控制器:
@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;
}
答案 0 :(得分:1)
问题在于Jackson(默认情况下在Spring MVC中使用)并不知道如何转换" 10:00" - > java.sql.Time,它并不明显。您可以定义自定义反序列化器来执行从字符串到java对象的转换:
jspm build src/App.js ./dist/index.js --minify --skip-source-maps
要使用此解串器,只需输入
即可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
}
....
}
在CarWash类的firstShift字段之上
答案 1 :(得分:0)
尝试更新UI以此格式发送JSON:
executed from inside of actionRequested Method
fatal error: unexpectedly found nil while unwrapping an Optional value
2016-09-16 10:30:06.194590 Fredi[2567:551009] fatal error: unexpectedly found nil while unwrapping an Optional value
你的控制器很好。
很容易知道需要传递什么样的JSON才能看到Spring如何格式化你的JSON(使用Jackson Mapper):
{
"firstShift": {
"hours": 10,
"minutes": 0
}
}
然后点击该控制器查看生成的JSON结构。