带有可能需要的对象字段的 Spring 启动 RequestBody
Posted
技术标签:
【中文标题】带有可能需要的对象字段的 Spring 启动 RequestBody【英文标题】:Spring boot RequestBody with object fields that could be needed 【发布时间】:2020-12-16 21:30:08 【问题描述】:如何让我的 RequestBody 接受一个模型,该模型可能包含也可能不包含对象字段?
这是我调用的 Restcontroller 端点
@PatchMapping(value = "/projects/update/projectNumber")
public ResponseEntity<Object> updateProject(@PathVariable int projectNumber, @RequestBody RequestReviewUpdate rru)
return reviewUpdateService.updateReview(projectNumber, rru);
这是@RequestBody 正在接受的模型
public class RequestReviewUpdate
private UpdateProject project;
private List<UpdateHlsd> reviews;
private List<UpdateProjectLeadership> stakeHolders;
public UpdateProject getProject()
return project;
public List<UpdateHlsd> getReviews()
return reviews;
public List<UpdateProjectLeadership> getStakeHolders()
return stakeHolders;
我希望能够发送一个 JSON 可以包含所有对象字段,或者一些。
我的 JSON 正文可能看起来像这样......
"project":
"type": "HLSD"
,
"reviews": [
"id": 570,
"requestedBy": "Name here",
"notes":"test"
],
"stakeHolders": [
"id": 1088,
"projectResource": "sid"
]
或者这个……等等
"reviews": [
"id": 570,
"requestedBy": "name",
"notes":"test"
或任何其他可能的组合。
【问题讨论】:
如果您只发送JSON
有效负载中的一些属性,则只有这些属性将在RequestReviewUpdate
类中设置。默认情况下,JSON
有效负载中不可用的其他属性将设置为null
。在第二种情况下,stakeHolders
列表和project
对象将设置为null
。 reviews
列表将设置为一个元素列表。默认情况下它应该以这种方式工作。您遇到过任何问题吗?
【参考方案1】:
只需将您的RequestReviewUpdate
设为可选,例如:
@PatchMapping(value = "/projects/update/projectNumber")
public ResponseEntity<Object> updateProject(@PathVariable int projectNumber, @RequestBody(required=false) RequestReviewUpdate rru)
return reviewUpdateService.updateReview(projectNumber, rru);
这将使您的参数完全或部分可选。 IE。您作为参数接收到的对象的任何成员,可能存在或不存在。
【讨论】:
假设我的 RequestReviewUpdate 模型中没有包含 UpdateProject 类。当我尝试调用 getProject() 方法时会发生什么?我的代码不会因为我调用一个空对象而出错吗? 你会得到null
。
谢谢。这解决了我的问题。
如果可以的话,我会的。我的声誉太低,无法投票。以上是关于带有可能需要的对象字段的 Spring 启动 RequestBody的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery:如何将字段添加到 REPEATED 记录?