【问题标题】:Getting bad request while passing LocalDateFilter spring rest controller通过 LocalDateFilter 弹簧休息控制器时收到错误请求
【发布时间】:2020-04-27 04:39:09
【问题描述】:
/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]]

对于 greaterThanEqualslessThanEquals 没有收到错误请求错误,但是对于 greaterThanlessThan 错误存在。谁能帮我解决这个问题?

【问题讨论】:

  • 更多详情?日志?
  • @CodeScale 完整错误日志已添加
  • 那么对于完全相同的请求nextDateOfScreening.greaterThanEquals 是否有效?
  • 我会尝试复制自己。我稍后再找你;-)
  • nextDateOfScreening.greaterThanEquals 没有收到错误请求

标签: java spring postman jhipster spring-restcontroller


【解决方案1】:

首先greaterThanEquals 不存在于LocalDateFilter 中。其实是greaterOrEqualThan 所以 nextDateOfScreening.greaterOrEqualThan.

这就是它“工作”的原因,因为 spring 没有找到 LocalDateFilter 设置器,因此创建了一个“空”LocalDateFilter

对于lessThan,找到了setter,但未配置将String 转换为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"));
    }
}

【讨论】:

  • 收到一个错误的请求,所以它没有进入方法内部。那么什么时候可以进行这种转换呢?
  • 同样的错误?正如我所说,您只需使用 @Component 注册转换器...如果扫描 bean,它应该可以工作
  • 我自己转载了
  • 你添加转换器了吗?
  • 非常感谢,它正在工作..我添加了错误的转换器,这就是它不起作用的原因
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 2021-06-18
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
相关资源
最近更新 更多