JSON對象(Map對象轉JSON)
- 導入jastjson-1.2.13.jar
- 驗證方法
- @ResponseBody
- 作用:將標註該註解的處理方法的返回結果直接寫入HTTP response Body中,一般會在異步獲取數據時使用(ajax)
- 注意:如果要輸出中國字,必須在控制器方法中調用URLEncoder.encode()方法
- URLEncoder.encode(str, “UTF-8”);
- 如果要輸出中國字,必須在js中調用decodeURI()方法
控制器端方法示例
@RequestMapping("/checkUserName")
@ResponseBody
public Object checkUserNameExtist(String name) {
Map<String, String> result = new HashMap<String, String>()
//StringUtils是com.mysql.jdbc提供的靜態類,在mysql的數據庫連接jar中
if (StringUtils.isNullOrEmpty(name)) {
//如果要輸出中文信息必須進行編碼,使用java.net.URLEncoder.encode("中國字","UTF-8")方法
result.put("message", MyUtils.ajaxEncoding("用戶名已存在"))
} else {
Users users = usersService.findUserExist(name)
if (users == null) {
result.put("message", MyUtils.ajaxEncoding("用戶名可以使用"))
} else {
result.put("message", MyUtils.ajaxEncoding("用戶名已存在"))
}
}
return JSONArray.toJSONString(result)
}
上面代碼中用到的MyUtils代碼示例
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class MyUtils {
public static String ajaxEncoding(String str){
try {
str=URLEncoder.encode(str, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}
}
jsp頁面的ajax示例,使用jquery-1.11.3
<script src="js/jquery.min.js" charset="UTF-8"></script>
<script type="text/javascript" charset="UTF-8">
$("#userName").bind("blur",function(){
$.ajax({
type:"POST",
url:"checkUserName",
data:{name:$("#userName").val()},
dataType:"json",
success:function(data){
alert(decodeURI(data.message));
}
});
});
</script>
解決中文亂碼的簡單方式
- 使用@RequestMapping的produces屬性
- 裝配StringHttpMessageConverter,設置編碼爲UTF-8
- supportedMediaTypes屬性
- 指定媒體類型:application/json
- 字符編碼:UTF-8
- 一次配置,永久搞定
使用@RequestMapping
@RequestMapping(value="/displayUserInfo",method=RequestMethod.GET,produces="{application/json;charset=UTF-8}")
裝配StringHttpMessageConverter
<mvc:annotation-driven >
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="setSupportedMediaTypes" >
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
解決時間對象轉JSON時間的格式問題
- 在實體類的屬性上加@JSONField(format=”yyyy-MM-dd”)
@JSONField(format="yyyy-MM-dd")
- 配置FastJson的消息轉換器-FastJsonHttpMessageConvertor
- 配置於中
- 在配置之後,不需要在代碼中寫JSONArray.toJSONString(user)的代碼了,直接返回實體對象即可
- 只有默認的返回日期格式(不能更改麼?!)
- 如果要改,只能使用註解@JSONField來更改
<mvc:annotation-driven >
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
</list>
</property>
<property name="features">
<list>
<value>WriteDateUseDateFormat</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
- 自定義FastJson消息轉換器(坑爹,視頻不講了,讓自己的去解決)