Spring DataRest вставка, как передать только отношение id вместо лица - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть 2 сущности с отношением OneToOne, таким образом:

Grupo.java:

@OneToOne(fetch=FetchType.LAZY)
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@JsonIdentityReference(alwaysAsId = true)
@JoinColumn(name = "administradorId")
private Usuario administrador;

Usuario.java:

@OneToOne(mappedBy = "administrador",fetch=FetchType.LAZY)
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@JsonIdentityReference(alwaysAsId = true)
private Grupo grupo;

При вставкегруппа через почтовый запрос Я хочу сделать это следующим образом:

{
"titulo":"title",
"descripcion":"cosa",
"activo":true,
"administrador":2,
"portada": ""
}

Но единственный способ, которым это работает, это

 {
    "titulo":"title",
    "descripcion":"cosa",
    "activo":true,
    "administrador": {"id":2},
    "portada": ""
    }

Я не хочу передавать всю сущность {"id ": 2} только хотите передать 2.

спасибо.

1 Ответ

0 голосов
/ 08 декабря 2018

Вы можете создать собственный сериализатор:

public class CustomSerializer extends JsonSerializer<User> {
      public void serialize(User value, JsonGenerator jgen,
        SerializerProvider provider) throws IOException, JsonProcessingException {
        jgen.writeNumber(user.getId());
     }
 } 

И нужно добавить аннотацию под названием @ JsonDeserialize.

  @OneToOne(fetch=FetchType.LAZY)
  @JsonIdentityInfo(generator = 
  ObjectIdGenerators.PropertyGenerator.class, property = "id")
  @JsonIdentityReference(alwaysAsId = true)
  @JoinColumn(name = "administradorId")
  @JsonSerialize(using = CustomSerializer. Class) 
   private Usuario administrador;
...