大家,我用的是boot 2.0.x,项目编码和字符集是UTF-8,请求和响应一样,但是当使用bean验证2时,转换错误信息,它显示ascii?1:定义一个bean比如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:通过 Postman 启动应用,请求参数: 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”:“邮件地址无效,é\u0082®ä»¶å\u009c°å\u009d\u0080æ\u0097 æ\u0095\u0088!” ,
当我使用简体中文时,它会出现如 ascii 码,如何显示或解码正常如:
mail address is invalid,邮件地址无效!
mail address is required,邮件地址为必填项!
谢谢你们!