Java:将Jackson(JSON)类转换为Entity(JPA)类

时间:2017-02-21 15:54:10

标签: java json hibernate jpa jackson

  

我有两个具有相同字段的类。但是,一个是JSON   另一个是JPA实体。我想转换JSON   对象(学生)进入JPA实体(StudentEntity)。我试着解析   JSON类进入JPA类,但它不允许。如何将(Student)Json类转换为(StudentEntity)类,以便我可以使用JSON类中的信息在JPA实体类中保留数据库?

package com.student.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "Student")
public class StudentEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(nullable = false, updatable = false)
    @GeneratedValue
    private long studentID;

    private String fName;
    private String lName;

    private Address address;

    public long getStudentID() {
        return studentID;
    }

    public void setStudentID(long studentID) {
        this.studentID = studentID;
    }

    public String getfName() {
        return fName;
    }

    public void setfName(String fName) {
        this.fName = fName;
    }

    public String getlName() {
        return lName;
    }

    public void setlName(String lName) {
        this.lName = lName;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}
package com.ejb.objectmapper.entity.student;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonIgnoreProperties("studentID")
public class Student {
    private long studentID;
    @JsonProperty
    private String fName;
    @JsonProperty
    private String lName;

    private Address address;

    public long getStudentID() {
        return studentID;
    }

    public void setStudentID(long studentID) {
        this.studentID = studentID;
    }

    public String getfName() {
        return fName;
    }

    public void setfName(String fName) {
        this.fName = fName;
    }

    public String getlName() {
        return lName;
    }

    public void setlName(String lName) {
        this.lName = lName;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}

3 个答案:

答案 0 :(得分:0)

你可以使用一些Mapping-Framework,即Dozer(http://dozer.sourceforge.net)或MapStruct(http://mapstruct.org

使用Dozer复制类可以归结为像

这样简单的东西
dozer.map(jsonObject,Entity.class);

答案 1 :(得分:0)

你在为MVC使用什么?如果使用Spring MVC,则可以使用JPA实体来表示JSON有效内容。适合我们。只需使用杰克逊注释来控制行为,例如@JsonIgnore

您不需要两个课程。

答案 2 :(得分:0)

另一种方法是将Mixin feature用于杰克逊。

这实际上可以让你摆脱Student类(如果可能的话),并将JSON直接解组到StudentEntity类的新实例。

这种方法在很大程度上取决于您的Web应用程序的复杂程度,以及您坚持使用DTO模式的依赖程度。 Spring Data REST非常成功地做到了这一点。事实上,既然你已经在使用JPA,我会推荐它(如果它适合你的使用案例),并且,和很多东西一样,你可以获得很多东西免费'