如何 return QUARKUS Resteasy JSONB 中具有空值的字段并覆盖已排序的键?
How to return fields with null values in QUARKUS Resteasy JSONB and override sorted keys?
我使用以下库
- quarkus-hibernate-orm-华丽
- quarkus-agroal quarkus-jdbc-mysql
- quarkus-resteasy-jsonb
- quarkus-resteasy
- 放心
我的@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"}]
对
使用“quarkus-resteasy-jsonb”我得到
[{"id":"0b3d7518f3","name":"tests org"},{"description":"some text","id":"78787518f","name":"ci tests org 2"}]
问题?
如果我使用 quarkus-resteasy-jackson,它 returns 空值作为响应的一部分。而 quarkus-resteasy-jsonb 不会 return 具有空值的列作为响应的一部分。 id:0b3d7518f3 的响应中没有“描述”。我需要所有领域。我怎样才能实现它。 ?
json 节点的 Jackson 顺序是“id、name、description”,这是我在 Entity 中排序的方式。而 JsonB 它是“描述、ID、名称”。它使用排序键。有没有办法在 json 中覆盖它?
谢谢
好吧,我会说你自己回答了这个问题:如果 Jackson 符合你的需要,就使用 Jackson。
如果你真的想使用JSON-B,你可以用JsonbConfigCustomizer
bean配置JsonbConfig
。
参见https://quarkus.io/guides/rest-json#json-b。
您可以确定需要空值并调整顺序。
@Guillaume Smet 上面的回答确实帮我解决了。这是代码以防其他人正在寻找..
@Singleton
public class MyJsonbFormatConfig implements JsonbConfigCustomizer {
public void customize(JsonbConfig config) {
config.withNullValues(true);
}
}
为了订购,这里是 JsonbConfig 属性。
config.withPropertyOrderStrategy(PropertyOrderStrategy.LEXICOGRAPHICAL);
我使用以下库
- quarkus-hibernate-orm-华丽
- quarkus-agroal quarkus-jdbc-mysql
- quarkus-resteasy-jsonb
- quarkus-resteasy
- 放心
我的@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"}]
对
使用“quarkus-resteasy-jsonb”我得到
[{"id":"0b3d7518f3","name":"tests org"},{"description":"some text","id":"78787518f","name":"ci tests org 2"}]
问题?
如果我使用 quarkus-resteasy-jackson,它 returns 空值作为响应的一部分。而 quarkus-resteasy-jsonb 不会 return 具有空值的列作为响应的一部分。 id:0b3d7518f3 的响应中没有“描述”。我需要所有领域。我怎样才能实现它。 ?
json 节点的 Jackson 顺序是“id、name、description”,这是我在 Entity 中排序的方式。而 JsonB 它是“描述、ID、名称”。它使用排序键。有没有办法在 json 中覆盖它?
谢谢
好吧,我会说你自己回答了这个问题:如果 Jackson 符合你的需要,就使用 Jackson。
如果你真的想使用JSON-B,你可以用JsonbConfigCustomizer
bean配置JsonbConfig
。
参见https://quarkus.io/guides/rest-json#json-b。
您可以确定需要空值并调整顺序。
@Guillaume Smet 上面的回答确实帮我解决了。这是代码以防其他人正在寻找..
@Singleton
public class MyJsonbFormatConfig implements JsonbConfigCustomizer {
public void customize(JsonbConfig config) {
config.withNullValues(true);
}
}
为了订购,这里是 JsonbConfig 属性。
config.withPropertyOrderStrategy(PropertyOrderStrategy.LEXICOGRAPHICAL);