Spring,验证所有标头参数并一次输出错误

csga3l58  于 2023-03-02  发布在  Spring
关注(0)|答案(1)|浏览(106)

有没有可能一次性验证所有头参数,然后返回所有必需参数的验证消息,而不是Spring逐字段返回错误?
示例:如果我没有在下面的请求中传递两个头参数,Spring将返回第一个字段错误。我需要同时为这两个参数提供一个错误消息。

public String handleRequestByTwoHeaders(@RequestHeader(value="Header1",required=true) String header1, @RequestHeader(value="Header2",required=true) String header2) {

}

O/P:"消息":"方法参数类型字符串所需的请求标头'Header1'不存在",
虽然我们可以读取值并做空检查,但我的Swagger-UI不显示必填字段(*),如果我这样做。谢谢

xfb7svmp

xfb7svmp1#

我试图复制您的问题,棘手的部分是保持显示必填字段(*)在 Swagger 用户界面。
我想出了以下几点:
声明requiredHeaders

private List<String> requiredHeaders = new ArrayList<String>(){{
  add("Header1");
  add("Header2");
}};

@ApiImplicitParams用于Swagger-UI:

@ApiImplicitParams({
  @ApiImplicitParam(name = "Header1", paramType = "header", required = true),
  @ApiImplicitParam(name = "Header2", paramType = "header", required = true)
})
@PostMapping
public Object handleRequestByTwoHeaders(@RequestHeader HttpHeaders headers) {

  // modify this part for the response body of your need
  List<String> messages = new ArrayList<>();
  for(String s : requiredHeaders){
      if(!headers.containsKey(s) messages.add(s + " not found in header.");
  }

  if(messages.size() > 0) return ResponseEntity.badRequest().body(messages);
  return "OK";
}

一个缺点是requiredHeaders@ApiImplicitParams之间没有相关性。每当需要更新时,需要修改这两个字段。
希望能帮上点忙。

相关问题