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

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

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

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

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

xfb7svmp

xfb7svmp1#

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

  1. private List<String> requiredHeaders = new ArrayList<String>(){{
  2. add("Header1");
  3. add("Header2");
  4. }};

@ApiImplicitParams用于Swagger-UI:

  1. @ApiImplicitParams({
  2. @ApiImplicitParam(name = "Header1", paramType = "header", required = true),
  3. @ApiImplicitParam(name = "Header2", paramType = "header", required = true)
  4. })
  5. @PostMapping
  6. public Object handleRequestByTwoHeaders(@RequestHeader HttpHeaders headers) {
  7. // modify this part for the response body of your need
  8. List<String> messages = new ArrayList<>();
  9. for(String s : requiredHeaders){
  10. if(!headers.containsKey(s) messages.add(s + " not found in header.");
  11. }
  12. if(messages.size() > 0) return ResponseEntity.badRequest().body(messages);
  13. return "OK";
  14. }

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

展开查看全部

相关问题