【问题标题】:micronaut applying @Validation to inbound controller POJO(s) doesn't validatemicronaut 将 @Validation 应用于入站控制器 POJO 未验证
【发布时间】:2021-05-11 10:26:08
【问题描述】:

给定这个控制器方法。

import io.micronaut.validation.Validated;
...

@Validated
@Get(value = "test{?page*}", produces = APPLICATION_JSON)
public HttpResponse<TransactionListResponseDto> get(
        PageDto page) {
    Sort sort = Pageable.from(page.getPage(), page.getSize(), sortFrom(page.getSort()));
    return HttpResponse.ok();
}

以及看起来像这样的 PageDto。

import javax.validation.constraints.Min;
...

@Getter
@Setter
@Introspected
@JsonInclude(NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class PageDto {
    @Min(1)
    private int page = 1;
    private int size = 10;
    private String sort;
}

必要的验证包含在 gradle 文件中。

implementation "io.micronaut:micronaut-validation:$micronautVersion"
implementation "io.micronaut.beanvalidation:micronaut-hibernate-validator:$micronautVersion"

我期待控制器方法验证参数,但我很高兴将(例如)-100 作为页码传递,尽管有验证属性。 关注documentationadvice

我必须得出结论,我错过了构建步骤或其他什么?

【问题讨论】:

    标签: java bean-validation micronaut


    【解决方案1】:

    @Valid注解page参数,指示Micronaut使用嵌套验证:

    @Get(value = "test{?page*}", produces = APPLICATION_JSON)
    public HttpResponse<TransactionListResponseDto> get(@Valid PageDto page) {
        ...
        return HttpResponse.ok();
    } 
    

    那么它的行为是这样的:

    $ curl http://localhost:8080/test?page=-100
    {
      "message": "page.page: must be greater than or equal to 1",
      "_links": {
        "self": {
          "href": "/test?page=-100",
          "templated": false
        }
      }
    }
    

    如果您的项目中有 Micronaut 数据,那么您可以使用现有的 io.micronaut.data.model.Pageable 接口进行分页并将其直接传递到存储库类中。在这种情况下,您的方法可能如下所示:

    @Get(value = "test", produces = APPLICATION_JSON)
    public HttpResponse<Page<ItemOverview>> get(@Valid Pageable pageable) {
        return HttpResponse.ok(someRepository.findAll(pageable))
    } 
    

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 2019-03-27
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      相关资源
      最近更新 更多