Spring Boot自定义验证消息未显示

时间:2019-09-12 15:20:50

标签: spring spring-boot spring-validator

我有一个端点,该端点接受绑定到类GetParams的查询参数:

public class GetParams{
    @Min(value = 0, message = "OFFSET_INVALID")
    private Integer offset;

    @Min(value = 0, message = "LIMIT_INVALID")
    private int limit;

    public GetParams() {
        this.offset = 0;
        this.limit = 100;
    }

    public int getOffset() {
        return offset;
    }

    public int getLimit() {
        return limit;
    }

    public void setOffset(int offset) {
        this.offset = offset;
    }

    public void setLimit(int limit) {
        this.limit = limit;
    }

}

这是我控制器中的端点:

@GetMapping(value = "/applications")
public ResponseEntity<Data> getApplications( @Validated GetParams parameters) { ... }

当我发送违反其中一个约束的GET请求时,例如:

GET /applications?offset=-20&limit=100

该框架返回400,但是没有我的消息,实际上没有响应正文,也没有在控制台中打印堆栈跟踪!当查询参数有效时,结果也有效。为什么会这样?

谢谢。

3 个答案:

答案 0 :(得分:1)

对于GET请求,您无法像上面一样验证request-params与对象的绑定。您必须像这样单独验证每个参数:

public ResponseEntity<Data> getApplications(@RequestParam @Min(1) @Max(value=7, message="you custom message") Integer offset,  @RequestParam @Min(3) Integer params2, ... )
{
        //your code/logic
}

您只能对POST和其他带有@RequestBody且其正文中有其他请求的方式进行验证。

答案 1 :(得分:0)

请求参数将使用@RequestParam进行映射。

尝试

@GetMapping(value = "/applications")
public ResponseEntity<Data> getApplications( @Validated @ReqeustParam @Min(value = 0, message = "OFFSET_INVALID") Integer offset) { ... }`

答案 2 :(得分:0)

在根路径中,您可以将“ resources / application.properties ”中的“包含绑定错误”设置为“始终”。 “消息”也是如此。

server.error.include-message=always
server.error.include-binding-errors=always