Java Spring hateoas jaxrslinkbuilder添加空字段
我正在尝试将HATEOAS链接添加到我的控制器结果。 链接创建:Java Spring hateoas jaxrslinkbuilder添加空字段,java,spring,rest,spring-boot,jax-rs,Java,Spring,Rest,Spring Boot,Jax Rs,我正在尝试将HATEOAS链接添加到我的控制器结果。 链接创建: Link link = JaxRsLinkBuilder.linkTo(MainRestService.class) .slash(this::getVersion) .slash(LinkMappingConstants.TAXPAYERS) .slash(taxPayerId)
Link link = JaxRsLinkBuilder.linkTo(MainRestService.class)
.slash(this::getVersion)
.slash(LinkMappingConstants.TAXPAYERS)
.slash(taxPayerId)
.slash(LinkMappingConstants.ESTIMATIONS)
.slash(estimationId)
.withSelfRel();
链接本身创建得很好,但结果JSON中有多余的条目:
"links": [
{
"rel": "self",
"href": "http://localhost:8080/blablabla",
"hreflang": null,
"media": null,
"title": null,
"type": null,
"deprecation": null,
"template": {
"variables": [
],
"variableNames": [
]
}
}
]
我怎样才能得到这种格式?(不使用属性spring.jackson.default属性inclusion=NON_NULL
)
谢谢。正如您所提到的,如果您想在整个JSON上包含
非空属性,而不仅仅是链接,您可以使用spring.jackson.default property inclusion=NON\u NULL
。但是,这不会修复空模板字段
如果您希望仅在使用Jackson进行序列化的链接
对象上包含NON\u NULL
属性,您可以通过使用带有@JsonInclude(Include.NON\u NULL)
注释的链接
对象的
例如:
@JsonInclude(Include.NON_NULL)
abstract class LinkMixIn {
}
要隐藏模板字段,如果不希望序列化模板节,可以添加@JsonIgnore,或者在上面的回答中尝试NON\u DEFAULT
属性包含,这将创建对象的新实例并将其与要序列化的对象进行比较,以确定是否应包含它
例如,下面这样的内容根本不会序列化getTemplate的结果
@JsonInclude(Include.NON_NULL)
abstract class LinkMixIn {
@JsonIgnore abstract Template getTemplate();
}
无论如何,此属性字段“template”将保留。@kros365是这样-需要额外的MixIn自定义(非默认或忽略),我将更新我的答案以反映它。我使用org.springframework.hateoas.ResourceSupport和jaxrlinkbuilder创建链接。创建自定义链接不是问题,只是我认为有一种方法可以配置此解决方案。@kros365上面的答案应该包括自定义序列化以满足您的要求,可以使用JsonIgnore
完全忽略属性,也可以仅在属性为null时隐藏属性。如果有什么不清楚,请告诉我。
mapper.addMixIn(Link.class, LinkMixIn.class);
@JsonInclude(Include.NON_NULL)
abstract class LinkMixIn {
@JsonIgnore abstract Template getTemplate();
}