【问题标题】:Spring boot RequestBody with object fields that could be needed带有可能需要的对象字段的 Spring 启动 RequestBody
【发布时间】: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 对象将设置为nullreviews 列表将设置为一个元素列表。默认情况下它应该以这种方式工作。您遇到过任何问题吗?

标签: java json spring-boot spring-restcontroller


【解决方案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
  • 谢谢。这解决了我的问题。
  • 如果可以的话,我会的。我的声誉太低,无法投票。
猜你喜欢
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 2022-01-04
  • 2016-02-22
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多