如何在QUARKUS Resteasy JSONB中返回具有空值的字段并覆盖已排序的键?

问题描述

我使用下面的库

  1. quarkus-hibernate-orm-panache
  2. quarkus-农业quarkus-jdbc-MysqL
  3. quarkus-resteasy-jsonb
  4. quarkus-resteasy
  5. 放心

我的@Entity

public class Products extends PanacheEntityBase implements Serializable{

    private static final long serialVersionUID = 2L;
    @Id
    @Column( name = "id" )
    public String id;
    public String name;
    public String description;
}

我的资源

@GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Products> getProducts() {
        return Products.listAll() ;
    }

有了“ quarkus-resteasy-jackson”,我得到了

[{"id":"0b3d7518","name":"tests org","description":null},{"id":"78787518f","name":"ci tests org 2","description":"some text"}]

vs

有了“ quarkus-resteasy-jsonb”,我得到了

[{"id":"0b3d7518f3","name":"tests org"},{"description":"some text","id":"78787518f","name":"ci tests org 2"}]

问题?

  1. 如果使用quarkus-resteasy-jackson,它将返回null值作为响应的一部分。而quarkus-resteasy-jsonb不会返回具有空值的列作为响应的一部分。 id:0b3d7518f3的响应中没有“描述”。我需要所有领域。我该如何实现。 ?

  2. json节点的杰克逊顺序是我在Entity中订购的方式“ id,name,description”。而在JsonB中,它是“描述,标识,名称”。它使用排序键。有没有办法在json中覆盖它?

谢谢

解决方法

好吧,我想说你自己回答了这个问题:如果杰克逊适合您的需求,那就使用杰克逊。

如果您确实要使用JSON-B,则可以使用JsonbConfig bean配置JsonbConfigCustomizer

请参见https://quarkus.io/guides/rest-json#json-b

您可以肯定要求输入null值,也可以调整顺序。

,

@Guillaume Smet上面的答案确实帮助我解决了问题。这是其他人希望看到的代码。

@Singleton
public class MyJsonbFormatConfig implements JsonbConfigCustomizer {

  public void customize(JsonbConfig config) {
        config.withNullValues(true);
   }
}

要订购,请使用JsonbConfig属性。

config.withPropertyOrderStrategy(PropertyOrderStrategy.LEXICOGRAPHICAL);