我遇到了一种情况。假设,我在@RequestBody
,中收到这个JSON
{
"resourceId": "R0001",
"refs": [
{
"username": "infinite-despair",
"roleType": "3"
},
{
"username": "faith-knight",
"roleType": "2"
},
.
.
.
]
}
我把它绑定到一个POJO上,就像这样。
@PostMapping
public ResponseEntity<SomeModel> addRefs(@RequestBody @Valid ResourceRefRequest req) {...}
现在,ResourceRefRequest
如下,
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResourceRefRequest {
@NotNull(message = "Resource ID is required")
private String resourceId;
@NotEmpty
private List<@Valid RefReqItem> refs;
}
并且,RefReqItem
如下,
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@JsonInclude(JsonInclude.Include.NON_NULL)
public class RefReqItem {
private String resourceId;
@NotNull(message = "Username is required")
private String username;
@NotNull(message = "Role is required")
private Integer roleType;
}
一切都很好,正如我所期望的那样。唯一的问题是,对于所有的refs
来说,refReqItem.resourceId
就是null
。我想在refs
中填充每个refReqItem.resourceId
,在根处填充一个;即具有resourceRefRequest.resourceId
。有什么想法吗,我们如何才能做到这一点?
谢谢。
在ResourceRefRequest
中,您可以为JSON处理程序创建一个特殊的setter,以便在代码中进行自己的后处理:
@JsonSetter("refs")
public void setRefsWithResourceId(List<RefReqItem> refs) {
this.refs = refs.stream()
.map(ref -> {
ref.setResourceId(resourceId);
return ref;
})
.collect(Collectors.toList());
}
当从JSON创建Java对象时,将调用此setter,因为该方法具有setter的签名,并用@JsonProperty("refs")
进行注释。