在后台发起HTTP请求的时候,响应体传回的一般是Object或者JSON字符串。
要将Object对象转换成实体类对象可以先使用com.alibaba.fastjson.JSONObject类的toJSONString方法将Object对象转换成JSON字符串,然后再调用JSONObject.parseObject(jsonString,实体类.class)。
这种方法的好处是,系统会根据实体类所拥有的字段去匹配,匹配上的就将值赋给实体类,没匹配上就跳过。建议使用
User user= JSONObject.parseObject(JSONObject.toJSONString(o),User.class);
使用com.fasterxml.jackson.databind.ObjectMapper类,调用objectMapper.convertValue(obj, 实体类.class)可以直接将object对象解析成对应的实体类,不过缺点很明显,如果object中的某些字段在实体类中无法找到对应的字段,那么就会报错,不推荐。
User user= objectMapper.convertValue(obj, User.class);
spring报错:
No converter found for return value of type: class java.util.ArrayList
spring是没有将ArrayList转换成json的转换器的,需要导入json依赖。
如果是返回值的转json推荐导依赖,日常的业务代码转json,推荐方法四。
<!--jackson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.0</version>
</dependency>
后台java对象转json
方式一:导入jackson依赖之后,直接返回对象就可以转换成json格式。
@ResponseBody
@RequestMapping("/queryStudents.do")
public List<Student> queryStudents(){
List<Student> list= studentService.queryStudents();
return list;
}
方式二:可以使用ObjectMapper,直接将对象转换成json对象,map对象可以转,一般遇到的对象也可以转。不过该方式注意编码方式,要设置UTF-8编码。
@ResponseBody
@RequestMapping(value = "deleteStudent.do",produces = "text/html;charset=UTF-8")
public String deleteStudent(int id){
int nums=studentService.deleteStudent(id);
Student s=new Student();
if(nums>0){
s.setName("龙哥");
}
HashMap<Integer,String> map=new HashMap<>();
map.put(1,"龙龙long");
ObjectMapper om=new ObjectMapper();
String res="";
try {
res=om.writeValueAsString(s);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return res;
}
方法三:可以直接手写json格式的字符串,然后返回,里面必须使用双引号,因此要用反转义字符。
String tips="删除失败";
if(nums>0){
tips="{\"tips\":true}";
}
return tips;
方式四:可以使用com.alibaba.fastjson.JSONObject
传递一个对象即可将对象转换成json格式。
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String,Object> map=new HashMap<>();
map.put("1",1);
map.put("2",2);
map.put("3",3);
map.put("4","sd");
//转json格式的字符串
String s = JSONObject.toJSONString(map);
System.out.println(s);
}
}