gpt4 book ai didi

java - 使用 Spring 作为请求主体的 ZonedDateTime 列表

转载 作者:行者123 更新时间:2023-12-02 12:31:21 24 4
gpt4 key购买 nike

我正在使用 @PostMapping 带注释的方法实现 Spring @RestController。我想允许使用此正文进行 HTTP POST:

{"dateTimes":[
"2017-07-19T14:25+02:00",
"2017-08-19T14:25+02:00"
]
}

我有一个用作@RequestBody的对象:

public class TransactionAllowedRequestBody {
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private List<ZonedDateTime> dateTimes;

public List<ZonedDateTime> getDateTimes() {
return dateTimes;
}


public void setDateTimes(List<ZonedDateTime> dateTimes) {
this.dateTimes = dateTimes;
}
}

这是我的 Controller 方法:

@PostMapping("/transaction-allowed")
public void isTransactionAllowed(@AuthenticationPrincipal CustomUserDetails userDetails,
@RequestBody TransactionAllowedRequestBody requestBody) {
System.out.println("requestBody = " + requestBody);
}

但是,当我尝试这个时,我得到:

Could not read JSON document: Can not construct instance of java.time.ZonedDateTime: 
no String-argument constructor/factory method to deserialize from String value ('2017-07-19T14:25+02:00')

如果我将 ZonedDateTime 替换为 String,它就可以工作。

我使用的是 Spring Boot 1.5.3。

注意:在 GET 请求参数上使用 @DateTimeFormat 效果很好。我尝试过:

@GetMapping("/transaction-allowed")
public void isTransactionAllowed(@AuthenticationPrincipal CustomUserDetails userDetails,
@RequestParam("datetime") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) ZonedDateTime dateTime) {
System.out.println("userDetails = " + userDetails);
System.out.println("dateTime = " + dateTime);
}

最佳答案

问题似乎是我忘记包含 jackson-datatype-jsr310 依赖项,因为 Spring Boot 默认情况下不会添加它:

    <dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson.version}</version>
</dependency>

关于java - 使用 Spring 作为请求主体的 ZonedDateTime 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45274179/

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