Spring controller 如下
@Controller public class SimpleController { @ResponseBody @RequestMapping(value = "/hotel") public String hotel() { return "{\"status\":0,\"errmsg\":null,\"data\":{\"query\":\"酒店查詢\",\"num\":65544,\"url\":\"www.test.com\"}}"; } }
這里使用ResponseBody, 返回值直接是一個字符串, 沒有用到jackson, 如果是返回一個Object, 使用jackson轉json, 是沒有編碼問題的
這時酒店查詢幾個字全都變成了問號
由於Spring處理返回值為String類型的結果時使用了StringHttpMessageConverter, 所以我們需要配置他的編碼
<bean id="utf8Charset" class="java.nio.charset.Charset" factory-method="forName"> <constructor-arg value="UTF-8"/> </bean> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg ref="utf8Charset"/> </bean> </mvc:message-converters> </mvc:annotation-driven>