java - 通过 LocalDateFilter 弹簧休息控制器时收到错误请求
问题描述
/api/test?page=-1&size=50&nextDateOfScreening.greaterThan=2020-04-03&sort=id,asc
这是我传递的 url,在控制器中接收它,
@GetMapping("/test")
public ResponseEntity<List<ExampleDTO>> getAllTIBenScrDetails(ExampleCriteria criteria, Pageable pageable) {
Page<ExampleDTO> page = tIBenScrDetailsQueryService.findByCriteria(criteria, pageable);
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
return ResponseEntity.ok().headers(headers).body(page.getContent());
}
和 ExampleCriteria类为,
public class ExampleCriteria implements Serializable, Criteria {
private LocalDateFilter nextDateOfScreening; //jhipster LocalDateFilter
}
我对日期过滤器的请求很糟糕,
Field error in object 'ExampleCriteria' on field 'nextDateOfScreening.greaterThan': rejected value [2020-04-03]; codes [typeMismatch.ExampleCriteria.nextDateOfScreening.greaterThan,typeMismatch.nextDateOfScreening.greaterThan,typeMismatch.greaterThan,typeMismatch.java.time.LocalDate,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [ExampleCriteria.nextDateOfScreening.greaterThan,nextDateOfScreening.greaterThan]; arguments []; default message [nextDateOfScreening.greaterThan]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDate' for property 'nextDateOfScreening.greaterThan'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.time.LocalDate] for value '2020-04-03'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2020-04-03]]
对于greaterThanEquals和lessThanEquals错误请求错误不会得到,但是对于greaterThan和lessThan错误是存在的。谁能帮我解决这个问题?
解决方案
首先greaterThanEquals
不存在于LocalDateFilter
. 其实是greaterOrEqualThan
这样
nextDateOfScreening.greaterOrEqualThan
。
这就是它“工作”的原因,因为 spring 没有找到LocalDateFilter
setter 并因此创建了一个 "empty" LocalDateFilter
。
因为lessThan
找到了 setter,但未配置String
to的转换。LocalDate
为了解决这个问题,您必须声明一个自定义转换器->
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@Component
public class LocalDateConverter implements Converter<String, LocalDate> {
@Override
public LocalDate convert(final String s) {
return LocalDate.parse(s, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
}
推荐阅读
- machine-learning - 馈送神经网络:IndexError:索引超出范围
- python - 使用 matplotlib 将数据添加到绘图
- c++ - __STDCPP_DEFAULT_NEW_ALIGNMENT__ 出现之前的年龄是多少
- typescript - TypeScript 断言函数
- kubectl - 由于不支持的版本“extensions/v1beta1”,使用 kubectl 部署 Ditto 和 MongoDB 失败
- python - 如何从两个字典创建嵌套字典?
- ios - 如何检查设备中是否安装了 TikTok?
- c++ - 将 CDC 对象分配给 CPaintDC 类型时出现错误 C2248。[MFC]
- python - [多处理python]:没有输出
- mysql - 升级过程中从 5.6 到 5.7 的 AWS RDS MySQL 复制