【问题标题】:Spring dataRest insertion how to pass only id relationship instead entitySpring dataRest插入如何仅传递id关系而不是实体
【发布时间】:2018-12-07 21:59:48
【问题描述】:

我有 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。

谢谢。

【问题讨论】:

    标签: spring spring-boot spring-data-jpa spring-data spring-rest


    【解决方案1】:

    您可以创建自定义序列化程序:

    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;
    

    【讨论】:

    • 我发现我需要一个 CustomDeserializer 但你发布了一个 Serializer,你能帮我构建第一个吗?
    • 当然,我没看清楚你的问题 xD 抱歉,我是用手机回答你的 xD
    猜你喜欢
    • 2016-07-12
    • 2019-03-05
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    相关资源
    最近更新 更多