данного следующую DTO и контроллерКак я ошибка проверки напечатанная на отказе
public class PasswordCredentials implements AuthenticationProvider {
@NotNull
@NotEmpty
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String user;
@NotNull
@NotEmpty
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private CharSequence pass;
public void setPass(final CharSequence pass) {
this.pass = pass;
}
public void setUser(final String user) {
this.user = user;
}
@Override
public Authentication toAuthentication() {
return new UsernamePasswordAuthenticationToken(user, pass);
}
}
@RestController
@RequestMapping(path = "authentication")
class AuthenticationController {
private final AuthenticationManager am;
AuthenticationController(final AuthenticationManager am) {
this.am = am;
}
@RequestMapping(path = "password", method = RequestMethod.POST, consumes = {
"!" + MediaType.APPLICATION_FORM_URLENCODED_VALUE
})
ResponseEntity<?> login(@Valid @RequestBody final PasswordCredentials credentials) {
Authentication authenticate = am.authenticate(credentials.toAuthentication());
if (authenticate.isAuthenticated()) {
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
}
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
}
}
если, например pass
является недействительным будет ошибка проверки, и 400 будет, никогда не называя мой контроллер, который Это хорошо. У этого 400, однако, нет контента, есть ли способ получить выходные данные контроллеров BindResults
в качестве контента, чтобы потребитель API знал, что вызвало проблему? В идеале я бы не сделал этого в методе контроллера, чтобы это произошло на всех контроллерах?
Мне удалось получить это поведение с учетом данных весны следующим образом, но я хотел бы получить его для всех контроллеров API.
class RestConfig extends RepositoryRestConfigurerAdapter {
@Bean
Validator validator() {
return new LocalValidatorFactoryBean();
}
@Override
public void configureValidatingRepositoryEventListener(
final ValidatingRepositoryEventListener validatingListener) {
Validator validator = validator();
//bean validation always before save and create
validatingListener.addValidator("beforeCreate", validator);
validatingListener.addValidator("beforeSave", validator);
}
@Override
public void configureRepositoryRestConfiguration(final RepositoryRestConfiguration config) {
config.setBasePath("/v0");
config.setReturnBodyOnCreate(false);
config.setReturnBodyOnUpdate(false);
}