問題描述
請求的controller
@RestController
@RequestMapping("/user")
……
@PostMapping("/unit/update")
public String unitUpdate(@Validated(VaildatedInterface.UserUnitUpdate.class) UserUnit userUnit) {
return JsonUtil.formatInsertJSON(userService.updateUserUnit(userUnit));
}
接口請求返回json中的中文內(nèi)容變成[???]
{
"code": "1402",
"message": "??????",
"data": "id ID???? ",
"success": false
}
正確的返回應(yīng)該是
{
"code": "1402",
"message": "對象校驗異常",
"data": "id ID不能為空",
"success": false
}
問題出現(xiàn)的環(huán)境背景及自己嘗試過哪些方法
spring-mvc配置文件里沒有添加msgconver這個配置的時候所有的json中文返回都是[?];
<mvc:annotation-driven>
<!-- 指定http返回編碼格式,不然返回ajax請求json會出現(xiàn)中文亂碼 -->
<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>
我添加了配置之后,如果請求成功能夠進(jìn)入到controller里面返回中文沒問題;但是我給controller層加了一個統(tǒng)一的異常處理,經(jīng)過異常處理返回的json中文又變成[?];上面的返回中文[?]就是經(jīng)過了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());
}
}
相關(guān)代碼
另外我給tomcat的啟動添加了-Dfile.encoding=utf-8
你期待的結(jié)果是什么?實際看到的錯誤信息又是什么?
發(fā)生異常是請求到controller對象校驗不通過返回的,這個時候還需要給配置哪些才能讓全局返回json中文都不會出問題呢?
添加回答
舉報
0/150
提交
取消