Изпращане на отговор за почивка вместо HTML страница, когато javax.validation.constraints.* не е изпълнен

Създавам Spring REST услуга и имам куп крайни точки, които приемат полезен товар на заявка чрез метода POST. Включих JSR 303 спецификация в моя проект и тя работи добре за валидации. Сега как да накарам приложението си да изпрати JSON отговор заедно с различен код на състоянието. В момента приложението дава 400 със страница за грешка tomcat.

Грешка от приложението

Актуализация:

Разбрах, че трябва да включа 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());
        }
    }
}

person Rohit    schedule 19.10.2017    source източник
comment
Какво направихте досега?   -  person delephin    schedule 19.10.2017


Отговори (2)


Правилно ли е анотиран вашият клас обект?

Трябва да дефинирате UniqueConstraints в анотацията @Table.

@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

}
person Dzinot    schedule 21.10.2017

Има различни начини за решаване на това. Но най-простият за този случай е да върнете 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");
}

Или можете да създадете персонализирани съобщения за изключение и да ги хвърлите.

person Olantobi    schedule 21.10.2017