все, я использую boot 2.0.x, кодировка проекта и кодировка UTF-8, запрос и ответ одинаковы, но при использовании проверки бина 2 для преобразования сообщения об ошибке отображается ascii?1: определен компонент, такой как BeanValidation.java:
@Data
public class BeanValidation implements Serializable{
private static final long serialVersionUID = 6265504102271769397L;
@Email(message = "{bv2.email.invalid}")
@NotEmpty(message = "{bv2.email.required}")
private String email;
}
2: используется глобальный обработчик исключений:
@RestControllerAdvice
public class GenericExceptionHandler
extends ResponseEntityExceptionHandler
implements ErrorController{
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid1(
MethodArgumentNotValidException ex,
HttpHeaders headers,HttpStatus status,WebRequest request) {
BindingResult br = ex.getBindingResult();
List<String> errorList = new ArrayList<String>();
br.getFieldErrors().forEach(fe -> {
errorList.add(fe.getField() + ":" + fe.getDefaultMessage());
});
br.getGlobalErrors().forEach(ge -> {
errorList.add(ge.getObjectName() + ":" + ge.getDefaultMessage());
});
ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, ex.getLocalizedMessage(), errorList);
return handleExceptionInternal(ex, apiError, headers, apiError.getStatus(), request);
}
}
3: определите ValidationMessages.properties:
bv2.email.invalid = mail address is invalid,邮件地址无效!
bv2.email.required = mail address is required,邮件地址为必填项!
4: написать контроллер для обработки запроса:
@PostMapping("/bv2")
public Boolean jsr380(@Valid @RequestBody BeanValidation bv2) {
return null == bv2 ? false : true;
}
5: запустить приложение и запрос через почтальона с параметром запроса: http://localhost:12345/contextPath/bv2, данные запроса:
{"email":"email address"}
ответрезультат:
{
"timestamp": "2018-09-22T01:50:09.729+0000",
"status": "400",
"error": "Bad Request",
"errors": [
{
"defaultMessage": "mail address is invalid,é\u0082®ä»¶å\u009c°å\u009d\u0080æ\u0097 æ\u0095\u0088!",
"objectName": "beanValidation",
"field": "email",
"rejectedValue": "email address",
"bindingFailure": false,
"code": "Email"
}
],
"message": "Bad Request",
"path": "/contextPath/bv2"
}
это успешный ответ, но он автоматически кодирует ascii, поэтому мой вопрос таков: «defaultMessage»: «почтовый адрес недействителен», «u009c», «u009d» и «u0097».u0088! ",
, когда я использую упрощенный китайский, это выглядит как код ascii, как показать или декодировать до нормального, например:
mail address is invalid,邮件地址无效!
mail address is required,邮件地址为必填项!
спасибо всем!