如何将日期时间作为后Map控制器的请求体中的输入。
这是我的控制器,它正在获取对象DTO的请求体。
@PostMapping(value = "/filterJobs")
@ResponseStatus(HttpStatus.OK)
public ApiResponse getFilteredJobs(@RequestParam(defaultValue = "0") Integer pageNo,
@RequestParam(defaultValue = "20") Integer pageSize,
@RequestBody FilteredJobsDto filteredJobsDto) {
Code here but its coming even to the first line of code
}
我在请求体中使用FilteredJobsDto,该请求体具有以下参数
public class FilteredJobsDto implements Serializable {
private String jobName;
private Long createdBy;
private String status = "submitted";
private String tenantId;
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
@JsonDeserialize(using = DateTimeDeserializer.class)
private DateTime startDate;
@DateTimeFormat(pattern="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private DateTime endDate;
}
我的json body现在看起来像这样:
{
"jobName": "email notification",
"startDate": "2023-03-02T08:20:11.000Z",
"status": "submitted"
}
我在这里面临的错误是 Postman 和控制台端的错误请求:
logException : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 3 column 19 path $.startDate; nested exception is com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 3 column 19 path $.startDate]
当我没有在json body中使用startDate时,API工作正常,但只要我输入“startDate”:“2023-03-02T08:20:11。000 Z”这个在我的json正文中,它抛出了一个错误。
谁能帮我解决这个问题!
3条答案
按热度按时间gzszwxb41#
看起来你正在使用一些过时的类。在当前的Java包java.你会发现你需要的一切:
8nuwlpux2#
你能试试这个吗?我有同样的请求体和下面的工程罚款为我
编辑
fjaof16o3#
Sping Boot 默认提供良好的日期转换。您可以使用LocalDateTime来实现这一点,而不需要任何额外的依赖项。
默认情况下,Jackson不能使用Joda-Time。您需要注册JodaModule才能与Jackson一起使用Joda-Time。您可以添加此配置以让Sping Boot 在启动时注册它。
在ObjectMapper中注册Joda模块后,可以使用它将请求转换为模块。