1. 程式人生 > >SpringMvc中對json資料的處理

SpringMvc中對json資料的處理

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>