为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA SprimgMVC JSON返回中文问号

JAVA SprimgMVC JSON返回中文问号

千万里不及你 2019-01-16 17:17:46
问题描述 请求的controller @RestController @RequestMapping("/user") …… @PostMapping("/unit/update") public String unitUpdate(@Validated(VaildatedInterface.UserUnitUpdate.class) UserUnit userUnit) { return JsonUtil.formatInsertJSON(userService.updateUserUnit(userUnit)); } 接口请求返回json中的中文内容变成[???] { "code": "1402", "message": "??????", "data": "id ID???? ", "success": false } 正确的返回应该是 { "code": "1402", "message": "对象校验异常", "data": "id ID不能为空", "success": false } 问题出现的环境背景及自己尝试过哪些方法 spring-mvc配置文件里没有添加msgconver这个配置的时候所有的json中文返回都是[?]; <mvc:annotation-driven> <!-- 指定http返回编码格式,不然返回ajax请求json会出现中文乱码 --> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" index="0"> </constructor-arg> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> <value>*/*;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> 我添加了配置之后,如果请求成功能够进入到controller里面返回中文没问题;但是我给controller层加了一个统一的异常处理,经过异常处理返回的json中文又变成[?];上面的返回中文[?]就是经过了controllerException的,但是控制台打印的异常是中文没问题的; @ControllerAdvice @ResponseBody public class ControllerException { private Logger logger = LoggerFactory.getLogger(this.getClass()); @ExceptionHandler(BindException.class) public String bindException(Exception e) { List<ObjectError> eList = ((BindException) e).getBindingResult().getAllErrors(); String errStr = ""; for(int i=0; i< eList.size(); i++) { errStr += ((FieldError) eList.get(i)).getField() + " " + eList.get(i).getDefaultMessage() + " "; } return resultError(e, CodeEnum.CODE_1402, errStr); } …… /** * 异常打印返回 * @param e 异常类 * @param c 编码 * @return */ private String resultError(Exception e, CodeEnum c) { logger.warn(e.getMessage()); logger.warn(c.getMessage()); return JsonUtil.formatJSON(c, e.getMessage()); } } 相关代码 另外我给tomcat的启动添加了-Dfile.encoding=utf-8 你期待的结果是什么?实际看到的错误信息又是什么? 发生异常是请求到controller对象校验不通过返回的,这个时候还需要给配置哪些才能让全局返回json中文都不会出问题呢?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 496 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信