java - JSONField接收web提交的Json串,解析key
問題描述
SpringMVC Controller接收頁面POST提交的JSON串,因?yàn)镴SON串里面是帶“_”的全小寫,在java里面寫屬性的getter和setter實(shí)在太難看,所以就想到了用JSONField解析
//User類import com.alibaba.fastjson.annotation.JSONField;public class User{ @JSONField(name = 'user_name') private String userName; public String getUserName(){return this.userName; } public void setUserName(String userName){this.userName=userName; }}//Controller類@RequestMapping(value = '/insert_user',method = RequestMethod.POST)public String insertUser(@RequestBody User user){ System.out.println(user.getUserName()); return 'ok';}
但是在POST提交后沒有接收到啊,都是 null。后來用@SerializeName('user_name')還是不好使啊,請問這有解么,還是我的請求方式不對。。。。
問題解答
回答1:spring mvc 默認(rèn)的json轉(zhuǎn)換器是jackson,而你用的是fastjson中的@JSONField,所以不起作用。接下來你要做的就是替換掉默認(rèn)的json轉(zhuǎn)換器,具體方法百度
回答2:@RequestBody作用:
i) 該注解用于讀取Request請求的body部分?jǐn)?shù)據(jù),使用系統(tǒng)默認(rèn)配置的HttpMessageConverter進(jìn)行解析,然后把相應(yīng)的數(shù)據(jù)綁定到要返回的對象上; ii) 再把HttpMessageConverter返回的對象數(shù)據(jù)綁定到 controller中方法的參數(shù)上。
使用時機(jī):
A) GET、POST方式提時, 根據(jù)request header Content-Type的值來判斷:
application/x-www-form-urlencoded, 可選(即非必須,因?yàn)檫@種情況的數(shù)據(jù)@RequestParam, @ModelAttribute也可以處理,當(dāng)然@RequestBody也能處理);multipart/form-data, 不能處理(即使用@RequestBody不能處理這種格式的數(shù)據(jù));其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的數(shù)據(jù),必須使用@RequestBody來處理);
B) PUT方式提交時, 根據(jù)request header Content-Type的值來判斷:
application/x-www-form-urlencoded, 必須;multipart/form-data, 不能處理;其他格式, 必須;
說明:request的body部分的數(shù)據(jù)編碼格式由header部分的Content-Type指定;
