如果我使用@ControllerAdvice,我如何本地化Spring Validation错误的错误消息,如@Path



例如:

@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";,当我从法语版找到它的时候。

hibernate验证器jar文件包含不同的本地化消息。您需要根据请求中的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"
}

相关内容

最新更新