您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
12_JSON_解析器Jackson_java对象转json_注解(JsonIgnore与JsonFormat)
发布时间:2022-09-30 22:14:20编辑:雪饮阅读()
序列化Date类型字段引发的问题
上篇中我们实现了一个company类实例序列化化为json字符串。
但是此时如果company类中新增一个比如注册时间字段register_date,类型为Date,则序列化为json字符串后的效果,默认该字段是Date值的毫秒数。
Company类如:
package package3.servlet;
import java.util.ArrayList;
import java.util.Date;
public class Company {
private String company_name;
private double salary;
private ArrayList<Person> persons;
private Person legalPerson;
private Date register_date;
public Company(String company_name, double salary, ArrayList<Person> persons, Person legalPerson, Date register_date) {
this.company_name = company_name;
this.salary = salary;
this.persons = persons;
this.legalPerson = legalPerson;
this.register_date = register_date;
}
public String getCompany_name() {
return company_name;
}
public void setCompany_name(String company_name) {
this.company_name = company_name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public ArrayList<Person> getPersons() {
return persons;
}
public void setPersons(ArrayList<Person> persons) {
this.persons = persons;
}
public Person getLegalPerson() {
return legalPerson;
}
public void setLegalPerson(Person legalPerson) {
this.legalPerson = legalPerson;
}
public Date getRegister_date() {
return register_date;
}
public void setRegister_date(Date register_date) {
this.register_date = register_date;
}
}
用于序列化为json字符串的servlet:
package package3.servlet;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
/*
*
* com.fasterxml.jackson.core:jackson-databind:2.9.8
* 所需要的类ObjectMapper
* 关键字:jackson-databind
* File=>Project Structure...=>Project Settings=>Libraries=>+=>From Maven...=>搜索jackson-databind(版本,哥这边选择的是2.9.8)并勾选Download to
* 将下载下来的那个lib目录复制到web/WEB-INF下面,其它的就正常ok、apply
*
*
* */
@WebServlet("/ServletTest")
public class ServletTest extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
ArrayList<Person> persons=new ArrayList<Person>();
Person legalPerson=new Person("布鲁斯韦恩",28);
persons.add(new Person("雪饮",24));
persons.add(legalPerson);
Company compay=new Company("韦恩企业",130000.00,persons,legalPerson,new Date());
String jsonString = objectMapper.writeValueAsString(compay);
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(jsonString);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
序列化输出的值如:
{"company_name":"韦恩企业","salary":130000.0,"persons":[{"name":"雪饮","age":24},{"name":"布鲁斯韦恩","age":28}],"legalPerson":{"name":"布鲁斯韦恩","age":28},"register_date":1664546519750}
JsonFormat注解
如果想要格式化该字段当然也是可以的,但是有个更简单的方法,只需要在该字段的getter方法上用注解JsonFormat来格式化,如:
package package3.servlet;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.ArrayList;
import java.util.Date;
public class Company {
private String company_name;
private double salary;
private ArrayList<Person> persons;
private Person legalPerson;
private Date register_date;
public Company(String company_name, double salary, ArrayList<Person> persons, Person legalPerson, Date register_date) {
this.company_name = company_name;
this.salary = salary;
this.persons = persons;
this.legalPerson = legalPerson;
this.register_date = register_date;
}
public String getCompany_name() {
return company_name;
}
public void setCompany_name(String company_name) {
this.company_name = company_name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public ArrayList<Person> getPersons() {
return persons;
}
public void setPersons(ArrayList<Person> persons) {
this.persons = persons;
}
public Person getLegalPerson() {
return legalPerson;
}
public void setLegalPerson(Person legalPerson) {
this.legalPerson = legalPerson;
}
@JsonFormat(pattern="yyyy-MM-dd")
public Date getRegister_date() {
return register_date;
}
public void setRegister_date(Date register_date) {
this.register_date = register_date;
}
}
JsonIgnore注解
当然,如果是直接不想显示该字段,则更加简单,只需要JsonIgnore注解即可
package package3.servlet;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.ArrayList;
import java.util.Date;
public class Company {
private String company_name;
private double salary;
private ArrayList<Person> persons;
private Person legalPerson;
private Date register_date;
public Company(String company_name, double salary, ArrayList<Person> persons, Person legalPerson, Date register_date) {
this.company_name = company_name;
this.salary = salary;
this.persons = persons;
this.legalPerson = legalPerson;
this.register_date = register_date;
}
public String getCompany_name() {
return company_name;
}
public void setCompany_name(String company_name) {
this.company_name = company_name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public ArrayList<Person> getPersons() {
return persons;
}
public void setPersons(ArrayList<Person> persons) {
this.persons = persons;
}
public Person getLegalPerson() {
return legalPerson;
}
public void setLegalPerson(Person legalPerson) {
this.legalPerson = legalPerson;
}
@JsonIgnore
public Date getRegister_date() {
return register_date;
}
public void setRegister_date(Date register_date) {
this.register_date = register_date;
}
}
关键字词:JSON,Jackson,java,json,JsonIgnore,JsonFormat,注解