SpringBoot(五)——JSON相关知识
以往以JSON格式返回只需要在控制器方法上加上@RequestMapping就可以了,记录其他3个知识点
1.常规情况下对于属性值为null的转换为空字符
直接手写一个配置类Jackson,套模板,不用加乱七八糟的依赖包
import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import java.io.IOException; @Configuration public class Jackson { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper; objectMapper = builder.createXmlMapper(false).build(); objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() { @Override public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(""); } }); return objectMapper; } }
然后对于控制器类中的方法就可以直接显示

2.JSONObject类的使用
(1)导入依赖包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.35</version>
</dependency>
(2)语法
在返回json格式上没什么用,常规的也可以,主要是用来把toString方法转化为json格式的字符串,以json格式处理null,上面的模板也是够用的。
@RequestMapping("/json4")
public JSONObject json4(){
JSONObject person4=new JSONObject();//原生JSONObject对象,和map差不多,只会显示设置的key
person4.put("age",22);
person4.put("hobbies",new String[] {"乒乓","骑行"});
System.out.println(person4);
return person4;
}
@RequestMapping("/json5")
public Person json5(){//实体类转为JSONObject
Person person5=new Person();
person5.setAge(22);
person5.setName("霸王别鸡");
person5.setHobbies(new String[]{"王者荣耀","羽毛球"});
System.out.println(person5);
System.out.println(JSONObject.toJSON(person5));
System.out.println(JSONObject.toJSONString(person5));
return person5;
}
@RequestMapping("/json6")
public JSONObject json6(){
HashMap<String,Object> map=new HashMap<>();//通过Map生成JSONObject
map.put("name","灰太狼");
map.put("age",21);
map.put("student",false);
map.put("hobbies",new String[]{"发明","抓羊"});
System.out.println(JSONObject.toJSON(map));
return (JSONObject) JSONObject.toJSON(map);
}
@RequestMapping("json7")
public JSONObject json7(){
String string="{ \"name\":\"Mike\",\"age\":22 }";//通过字符串生成JSONObject
//String string="{ \"name\":,,:\"Mike\",\"age\":22 ,,,}";//乱来的话运行会报错
JSONObject jsonObject=JSONObject.parseObject(string);
return jsonObject;
}
@RequestMapping("/json8")
public JSON json8(){
ArrayList<Person> list=new ArrayList<Person>();//试一下JSON对象,一般都是用JSONObject的
list.add(person);
Person person8=new Person();
person.setName("person8");
list.add(person8);
JSON json= (JSON) JSON.toJSON(list);
System.out.println(json);
return json;
}
@RequestMapping("/json9")
public JSONArray json9(){
JSONArray jsonArray = new JSONArray();//测一下JSONArray
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("name","守林鸟");
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("name","灰太狼");
jsonArray.add(jsonObject1);
jsonArray.add(jsonObject2);
System.out.println(jsonArray);
return jsonArray;
}
3.自行封装统一返回的数据结构
就是下面这个东西

自定义一个定义一个类JsonResult
import lombok.Data; @Data public class JsonResult<T> { private T data; private String code; private String msg; public JsonResult() { this.code = "10086"; this.msg = "没有返回的数据"; } public JsonResult(T data) { this.data = data; this.code = "200"; this.msg = "有数据返回"; } }
测试方法
@RequestMapping("/json10")
public JsonResult<Person> json10(){
return new JsonResult<>();
}
@RequestMapping("/json11")
public JsonResult<Person> json11(){
return new JsonResult<>(null);
}
@RequestMapping("/json12")
public JsonResult<Person> json12(){
Person person12 = new Person();
person12.setName("person12");
return new JsonResult<>(person12);
}



这里保留了上述处理null的Jackson类。
参考&引用
https://blog.csdn.net/taojin12/article/details/88244907

浙公网安备 33010602011771号