SpringMvc中對json資料的處理
阿新 • • 發佈:2018-12-19
1、使用@ResponseBody實現資料輸出
@ResponseBody的作用:
將標註此註解的處理方法的返回值結果直接寫入HTTP ResponseBody (Response物件的body資料區)中。
注意:使用下面程式碼時,需要在工程中引入阿里巴巴的fastjson-1.2.13jar
/** * 檢視使用者 * @param id * @param model * @return */ @RequestMapping(value="/view",method=RequestMethod.GET) @ResponseBody public Object View(@RequestParam String id){ User user=null; if(StringUtils.isNullOrEmpty(id)){ return "nodata"; }else{ try { user=userService.getUserById(id); } catch (Exception e) { e.printStackTrace(); return "failed"; } } return JSONArray.toJSONString(user); }
2、解決 JSON 資料傳遞的中文亂碼問題
出現亂碼的原因:
控制器的處理方法採用@ResponseBody註解向前臺頁面以JSON格式進行資料傳遞的時候,若返回值是中文,則會出現亂碼,原因是訊息轉換器 (org.springframework.http.converter.StringHttpMessageConverter)中固定了轉換字元編碼,如下所示。
public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> { public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1"); //......省略部分程式碼 }
兩種解決辦法:
1、在控制器處理方法上的@RequestMapping註解中配置produces
/** * 檢視使用者 * @param id * @param model * @return */ @RequestMapping(value="/view",method=RequestMethod.GET,produces={"application/json;charset=utf-8"}) @ResponseBody public Object View(@RequestParam String id){ User user=null; if(StringUtils.isNullOrEmpty(id)){ return "nodata"; }else{ try { user=userService.getUserById(id); } catch (Exception e) { e.printStackTrace(); return "failed"; } } return JSONArray.toJSONString(user); }
2、在springmvc-servlet.xml中配置StringHttpMessageConverter(訊息轉換器)
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=utf-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>