Невозможно десериализовать JSON во время операции сохранения CRUD из-за @JsonIdentityReference (alwaysAsId = true) - PullRequest
0 голосов
/ 29 августа 2018

У меня ошибка 415 Unsupported Media Type во время сохранения SpringJPA. Я добавил в TypeHeatSystem @JsonIdentityReference(alwaysAsId = true), потому что я хочу получить только идентификатор конвейера после запроса на получение.

ТипHeatSystem Entity:

@Entity
@Table(name = "type_heat_system")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@JsonIdentityInfo(
        generator = ObjectIdGenerators.PropertyGenerator.class,
        property = "typeHeatSystemId"
)
public class TypeHeatSystem {

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

@OneToMany(mappedBy = "typeHeatSystem", fetch = FetchType.LAZY,
        cascade = {CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH, CascadeType.REMOVE}, orphanRemoval = true)
@JsonIdentityReference(alwaysAsId = true)
private List<Pipeline> pipelines;

@Override
public String toString() {
    return "TypeHeatSystem{" +
            "typeHeatSystemId=" + typeHeatSystemId +
            ", typeHeatSystemValue='" + typeHeatSystemValue + '\'' +
            '}';
}

Объект трубопровода:

@Entity
@Table(name = "pipeline")
@JsonIdentityInfo(
        generator = ObjectIdGenerators.PropertyGenerator.class,
        property = "pipelineId")
public class Pipeline {

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

@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH, CascadeType.REMOVE}, fetch = FetchType.LAZY)
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "type_heat_system_id")
private TypeHeatSystem typeHeatSystem;

Метод внутри контроллера

PostMapping(value = "save")
public ResponseEntity save(@RequestBody TypeHeatSystem typeHeatSystem) throws JsonProcessingException {
    TypeHeatSystem requiredTypeHeatSystem;

    if (typeHeatSystem.getTypeHeatSystemId() < 1) {
        return new ResponseEntity<>("Передан некорректный Id", HttpStatus.BAD_REQUEST);
    }
    try {
        requiredTypeHeatSystem = typeHeatSystemService.save(typeHeatSystem);
    } catch (Exception ex) {
        return new ResponseEntity<>("Ошибка при работе сервера", HttpStatus.INTERNAL_SERVER_ERROR);
    }

    String result = new ObjectMapper().writeValueAsString(requiredTypeHeatSystem);
    return ResponseEntity.ok().body(requiredTypeHeatSystem);
}

Я также пытался использовать @JsonBackReference и @JsonManagedReference, но мне это не помогло.

Можете ли вы посоветовать мне, что я сделал не так. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...