在我的Spring Boot应用程序中,当我写一个类时,我想在序列化时排除该类的对象中的null
值,我只需使用@JsonInclude(Include.NON_NULL)
注释该类,或者在属性文件中指定属性spring.jackson.serialization-inclusion=NON_NULL
。Spring Boot Jackson:如何从java数组中删除空值?
但现在我有一个控制器,它返回我的类的Java数组(不是Collection
)为:
@RequestMapping(path = "/reviews", method = GET, produces = APPLICATION_JSON_VALUE)
public Review[] searchReviews(@RequestParam Map<String, String> params) {
而且很多时候这个数组不完全在这种情况下,我得到null
的位置没有物品的地方。
如何告诉Jackson在序列化时忽略Java数组中存在的空值?
我只是给它一个镜头通过将标注在我的控制方法的顶部是这样的:
@JsonInclude(JsonInclude.Include.NON_NULL)
@RequestMapping(path = "/reviews", method = GET, produces = APPLICATION_JSON_VALUE)
public Review[] searchReviews(@RequestParam Map<String, String> params) {
这:
@RequestMapping(path = "/reviews", method = GET, produces = APPLICATION_JSON_VALUE)
public @JsonInclude(JsonInclude.Include.NON_NULL) Review[] searchReviews(@RequestParam Map<String, String> params) {
这不会给任何错误,但没有按”不管工作。
试着设置属性文件中的属性,没有工作。
检索了用于Jackson序列化功能的github documentation,但没有发现任何能够在序列化时省略来自Java数组的null
值。最接近的功能是write_empty_json_arrays
,但那不是我所需要的。
是否java数组需要是固定长度的事实必须做这件事?
我应该怎么做才能将一个java数组:[object1, object2, null]
大小为3到[{}, {}]
而不是[{}, {}, null]
?
只是做了正确的事情滤除(或集合)。正确做事有助于。您不应该试图调整Jackson来弥补代码中的设计问题。您应该修复设计问题。 –
null
vaues,并停止返回部分填充阵列。根本不要甚至返回数组。返回列表不确定关于杰克逊,但您可以使用java 8流来过滤其中值!= null的数组,然后将流收集回数组 –
@JBNizet为什么这不是正确的事情?我的要求是返回前20的评论。我返回了20条评论。如果没有足够的评论,则null存在于数组中。我可以使用'List'做到这一点,但在此之前,我很好奇,为什么这不是正确的事情。你能提供一些见解吗? –