[英]Spring Boot: Default serialization for java.time.Duration changed from String to Number
[英]Spring boot jackson java.time.Duration
我已經創建了一個寧靜的Web服務,並且嘗試發送上述課程的發帖請求
public class A {
Duration availTime;
}
public class MyRest {
@RequestMapping(value = "/test", method = RequestMethod.POST)
public Response<?> test(@RequestBody A ta) {
return new ResponseEntity<>(HttpStatus.OK);`
}
}
原始請求主體
{
"availTime": {
"seconds": 5400,
"nano": 0,
"units": [
"SECONDS",
"NANOS"
]
}
}
預期的json結果
{"availTime": "PT1H30M"}
我收到了以上錯誤:無法讀取HTTP消息:
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected token (START_OBJECT),
expected one of [VALUE_STRING, VALUE_NUMBER_INT, VALUE_NUMBER_FLOAT] for java.time.Duration value; nested exception is
com.fasterxml.jackson.databind.exc.MismatchedInputException: Unexpected token (START_OBJECT), expected one of [VALUE_STRING, VALUE_NUMBER_INT, VALUE_NUMBER_FLOAT] for java.time.Duration value
異常說java.time.Duration
只能從int
, float
或string
創建,但是您提供的是Json對象。
將您的Duration類定義為
public class Duration {
private long seconds;
private long nano;
private List<String> units;
// setters / getters
}
現在您的請求將從A
類映射
編輯1
如果仍然要映射到java.time.Duration
,則需要更改請求正文。
案例1(int)
請求正文
{“ availTime”:5400}
產量
{ “availTime”: “PT1H30M”}
案例2(浮動)
請求正文
{“ availTime”:5400.00}
產量
{ “availTime”: “PT1H30M”}
情況3(字串)
請求正文
{“ availTime”:“ PT5400S”}
產量
{ “availTime”: “PT1H30M”}
對於上述所有三種情況,添加依賴項
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.8.8</version>
</dependency>
A類應修改為
public class A {
private Duration availTime;
// for json output of duration as string
@JsonFormat(shape = Shape.STRING)
public Duration getAvailTime() {
return availTime;
}
public void setAvailTime(Duration availTime) {
this.availTime = availTime;
}
}
將請求正文打印為json
ObjectMapper mapper = new ObjectMapper();
mapper.findAndRegisterModules();
System.out.println(mapper.writeValueAsString(ta));
如果仍然要映射現有的請求主體,則需要為Duration類編寫自定義反序列化器。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.