Spring Bootでクラスをデシリアライズする際に問題があります。私のコントローラがそれを逆シリアル化しようとすると、クラッシュします。ここではクラスがある:HibernateからJSONを逆シリアル化する
この1に依存@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() {
}
}
私のcontroler:
@RequestMapping(value="/trashCan", method=RequestMethod.GET)
public ResponseEntity<Iterable<TrashCan>> getPlaces(){
Iterable<TrashCan> trashCanIterable = trashCansRepository.findAll();
return new ResponseEntity<>(trashCanIterable, HttpStatus.OK);
}
私がウェブサービスを呼び出すと、私はこのror:
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"])
私はこのエラー=/
を解釈できません。この問題の助けがあれば大歓迎です。あなたは、エンティティ間の関係を使用する場合
@OneToMany(mappedBy = "trashSensor", targetEntity = Measurement.class, fetch = FetchType.LAZY)
@JsonIgnore
private List<Measurement> measurementList;
そして、はい...これが唯一のplace..youではありませんが、ループに入っているより多くのマッピングを把握し、それに応じてのため –
感謝を@JsonIgnoreを追加する必要があります。ちょうどあなたのコントローラーを変更を修正するために
高速返信! 私が行う場合、私はmeasurementListを使用することができません、そうですか?私はこの要望を必要とするので、@JsonIgnoreを使用することはできません –
次にmeasurementListマッピングで@JsonIgnoreを使用してください –