当任何请求参数丢失/无效时抛出错误

时间:2017-07-15 11:07:18

标签: spring spring-boot

我必须接受由JSON和多个文件组成的多部分表单数据,并将其传递给某些第三方API。

目前,我已经创建了一个组件

@Component
public class Submit{
  private Multipart file;
  private String json;
  //getters setters
}

控制器看起来像

 @Controller
 {
   //some code
   @PostMapping("/submit")
   public void post(@ModelAttribute @Valid Submit submit) throws Exception{
     getName()
   }
 }

当请求时,没有所有参数,即文件& json ,是由Postman客户端提交到/ submit API,Spring Boot似乎没有抛出任何类型的验证异常/错误请求错误。

相反,它继续使用getName()函数。

如果缺少提交模型中的任何参数,我如何确保抛出异常?

不应该@Valid成为实现这一目标的人吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用注释和BindingResult。 在提交类中:

import javax.validation.constraints.NotNull;
public class Submit{
  @NotNull
  private Multipart file;
  @NotNull
  private String json;
  //getters setters
}

在post方法中你必须提供BindingResult。

import org.springframework.validation.BindingResult;
@PostMapping("/submit")
public void post(@ModelAttribute @Valid Submit submit, BindingResult bindingResult, HttpServletResponse response) throws Exception{
  if (bindingResult.hasFieldErrors()){
    response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
    return;
  }
  getName()
}

这应该适合你。