JSON(JavaScript Object Notation,js对象标记),是一种轻量级的数据交换格式。
对象格式:
对象的属性也可以是对象,数组
{ “key”:"value", "name":"zhangsan", "age":30, "company":{ "city":"南京", "Company_name":"xxxxxxx", "position":"manager" }, "friends":["lisi","wangwu","zhaoliu"] }
对象数组:
[{"name":"zhangsan","age":30}, {"name":"lisi","age":42}, {"name":"wangwu","age":57}]
@RequestMapping:指定请求的URL
@RequestBody:在方法的形参中,将请求体中的数据绑定到形参上
@RespsonseBody:作用在方法上,将方法的返回结果直接写进HTTP Response Body里。一般情况下,@ResponseBody都会在异步获取数据时使用,被标注的方法返回的数据都将输出到响应流中。
遇到的错误
Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]
错误代码:
Android客户端:
String u_name = username.getText().toString(); String u_pwd = password.getText().toString(); User user = new User(u_name, u_pwd); Gson gson = new Gson(); String json = gson.toJson(user); RequestBody requestBody = new FormBody.Builder() .add("user", json) .build();
服务端:
public UserData register(@RequestBody User user){ …… …… }
客户端是把json对象放进了方法体中,理论上可以改成(@RequestParam Json user)(还没经过试验是否可行),改成(@RequestParam User user)是不可行的,这时候会报错无法转换。
正确代码如下,使用OKHTTP
String u_name = username.getText().toString(); String u_pwd = password.getText().toString(); User user = new User(u_name, u_pwd); Gson gson = new Gson(); String json = gson.toJson(user); RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),json);
对象转换成json数据
User user = new User(u_name, u_pwd); Gson gson = new Gson(); String json = gson.toJson(user);
json数据转换成对象
private User parseJsonWithGson(String jsonData){ Gson gson=new Gson(); User user=gson.fromJson(jsonData,User.class); return user; }
List集合转换成json数据
Gson gson=new Gson(); String gs=gson.toJson(list);
json数据转换成List集合
private List<User> parseJsonWithGson(String jsonData){ Gson gson=new Gson(); List<User> users=gson.fromJson(jsonData,new TypeToken<ArrayList<User>>(){}.getType()); // Log.d("users",users.toString()); return users; }
map集合转换成json数据
Gson gson=new Gson(); String gs=gson.toJson(map);
json数据转换成map集合
private Map<String,Object> parseJsonWithGson(String jsonData){ Gson gson=new Gson(); Map<String,Object> m=gson.fromJson(jsonData,new TypeToken<HashMap<String,Object>>(){}.getType()); return m; }