hibernate验证器jar文件包含不同的本地化消息。您需要根据请求中的
例如:
@GetMapping("/exception/{id}")
public ResponseEntity getException(@PathVariable @Min(1) Integer id) {
return ResponseEntity.ok().body(id.toString());
}
它必须返回"0";必须大于或等于1〃;(默认消息(当我从eng页面调用id为-5的函数时。像这样的";doitêtre supérieur ouégalà1";,当我从法语版找到它的时候。
Accept-Language
标头进行配置,它将决定显示哪条消息。
@Bean
public AcceptHeaderLocaleResolver localeResolver() {
final AcceptHeaderLocaleResolver resolver = new AcceptHeaderLocaleResolver();
resolver.setDefaultLocale(Locale.US);
return resolver;
}
Response DTO对象。
@Data
public class ErrorDto {
private LocalDateTime timestamp;
private HttpStatus status;
private String error;
public ErrorDto(HttpStatus status, String error) {
timestamp = LocalDateTime.now();
this.status = status;
this.error = error;
}
}
然后在ControllerAdvice中捕获ConstraintViolationException并显示响应。
@ResponseStatus(code = HttpStatus.BAD_REQUEST)
@ExceptionHandler({ConstraintViolationException.class})
public ResponseEntity<Object> handleConstraintViolation(ConstraintViolationException ex, WebRequest request) {
String error = "";
for (ConstraintViolation<?> violation : ex.getConstraintViolations()) {
error = violation.getMessage();
}
ErrorDto errorDto = new ErrorDto(HttpStatus.BAD_REQUEST, error);
return new ResponseEntity<>(errorDto, errorDto.getStatus());
}
它将为您提供给定控制器的响应。
{
"timestamp": "2022-10-23T21:08:07.0459025",
"status": "BAD_REQUEST",
"error": "doit être supérieur ou égal à 1"
}