2017-10-19 81 views
0

我构建了一个Spring REST服务,并且我有一堆通过POST方法接收请求负载的端点。我在我的项目中包含了JSR 303规范,并且它对验证工作正常。现在我如何让我的应用程序发送一个JSON响应以及一个不同的状态码。目前该应用程序给出了一个400的错误页面。当没有满足javax.validation.constraints。*时,发送休息响应而不是HTML页面

Error from the application

更新:

我想通了,我需要包括BindingResult在我的方法,所以我可以从那里提取的错误。

@PostMapping(value = "/validateBankInformation", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) 
protected ResponseEntity<BusinessSolutionVO> validateBankInformation(@Valid @RequestBody BankInformation bankInformation, BindingResult bindingResult) { 
    if (bindingResult.hasErrors()) { 
     List<ObjectError> errors = bindingResult.getAllErrors(); 
     for (ObjectError error : errors) { 
      System.out.println(error.getDefaultMessage()); 
     } 
    } 
} 
+0

到目前为止你做了什么? – delephin

回答

0

实体类是否正确注释?

您必须在@Table注释中定义UniqueConstraints

@Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "username" }), 
    @UniqueConstraint(columnNames = { "email" }), @UniqueConstraint(columnNames = { "field1", "field2" }) }) 
public class User implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    @Email 
    @NotNull 
    private String email; 

    @NotNull 
    @Size(min = 4, max = 24) 
    private String username; 

    @NotNull 
    private String password; 

    @NotNull 
    private String field1; 

    @NotNull 
    private String field2; 

    // Getters 
    // Setters 
    // Other Methods 

} 
0

有不同的方法可以解决这个问题。但这种情况下,最简单的一个是返回HTTP错误响应象下面这样:

@PostMapping(value = "/validateBankInformation", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) 
protected ResponseEntity<BusinessSolutionVO> validateBankInformation(@Valid @RequestBody BankInformation bankInformation, BindingResult bindingResult) { 

    if (bindingResult.hasFieldErrors()) { 
      String errors = bindingResult.getFieldErrors().stream() 
        .map(p -> p.getDefaultMessage()).collect(Collectors.joining("\n"));    
       //throw new InvalidRequestParameterException("Bad Request", errors); 

      return ResponseEntity.badRequest().body(errors); 
    } 

    return ResponseEntity.ok("Successful"); 
} 

或者你也可以创建自定义的异常消息,并把他们。

相关问题