java - 从 Hibernate 反序列化 JSON

标签 java json spring hibernate jackson

我在 Spring Boot 中反序列化类时遇到问题。当我的 Controller 尝试反序列化它时,它崩溃了。这是类(class):

@Entity
@Table(name="trash_cans")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id")
public class TrashCan {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="TRASH_CAN_ID")
    long id;

    @Column(name="TRASH_CAN_NAME")
    String name;

    @ManyToOne
    @JoinColumn(name="PLACE_ID")
    private Place place;

    @OneToMany(mappedBy="trashCan", targetEntity=TrashMeter.class, fetch=FetchType.LAZY)
    private List<TrashCan> trashMeterList;

    @OneToMany(mappedBy="trashCan", targetEntity=TrashSensor.class, fetch=FetchType.LAZY)
    private List<TrashSensor> trashSensorList;

    public TrashCan() {     
    }

    public TrashCan(long id, String name) {
        super();
        this.id = id;
        this.name = name;
    }

    [getters and setters]
}

这取决于这个:

@Entity
@Table(name="trash_sensor")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id")
public class TrashSensor {

    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    @Column(name="name")
    private String name;

    @Column(name="description")
    private String description;

    @ManyToOne
    @JoinColumn(name="TRASH_CAN_ID")
    private TrashCan trashCan;

    @OneToMany(mappedBy = "trashSensor", targetEntity = Measurement.class, fetch = FetchType.LAZY)
    private List<Measurement> measurementList;

    public TrashSensor() {
        super();
    }

垃圾传感器取决于此类:

@Entity
@Table(name="measurement")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Measurement {

    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    @Column(name="value")
    private float value;

    @Column(name="last_measure")
    private LocalDateTime dateTime;

    @ManyToOne
    @JoinColumn(name="trash_sensor_id")
    private TrashCan trashSensor;

    public Measurement() {
    }

}

我的 Controller :

@RequestMapping(value="/trashCan", method=RequestMethod.GET)
    public ResponseEntity<Iterable<TrashCan>> getPlaces(){
        Iterable<TrashCan> trashCanIterable = trashCansRepository.findAll();

        return new ResponseEntity<>(trashCanIterable, HttpStatus.OK);
    }

当我调用网络服务时,出现此错误:

Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: could not deserialize (through reference chain: java.util.ArrayList[0]-br.com.simplepass.cleanerway.domain.TrashCan["trashSensorList"]-org.hibernate.collection.internal.PersistentBag[0]-br.com.simplepass.cleanerway.domain.TrashSensor["measurementList"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: could not deserialize (through reference chain: java.util.ArrayList[0]-br.com.simplepass.cleanerway.domain.TrashCan["trashSensorList"]-org.hibernate.collection.internal.PersistentBag[0]-br.com.simplepass.cleanerway.domain.TrashSensor["measurementList"])

我无法解释此错误=/。非常感谢任何有关此问题的帮助。

最佳答案

由于您的 json 正在进入循环,因此您会收到此错误,为避免这种情况,请使用 @JsonIgnore 注释:

@OneToMany(mappedBy = "trashSensor", targetEntity = Measurement.class, fetch = FetchType.LAZY)
@JsonIgnore
private List<Measurement> measurementList;

关于java - 从 Hibernate 反序列化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40422830/

相关文章:

java - Spring 安全奇怪的行为

java - 如何解决 hibernate 双向映射导致的json序列化器中的循环引用?

java - Spring 数据 jpa,jparepository 返回字符串列表代替 DTO 对象

Java 表达式解析获取对象

java - mvc View 对象最佳实践

java - CheckStyle 检查未被忽略

java - 将 RGB 转换为灰度

ios - 在 Swift 中将 socket.io 数据转换为 JSON

python - Steam API 获取特定游戏的历史玩家数

java - jparepository 未在服务中自动连接