访问 Spring @RequestBody 中动态添加的属性

我有一个如下所示的帖子映射:


@PostMapping(value = "/profiles/{profileId}/verify/")

public Response getVerificationInformation (

    @RequestBody VerificationBody body) {

    ... do something with the body

    ... call function A with body object

}

随后在函数 A 中,我访问 body 对象的一些属性。


另外,在前端,我正在修改命中此后映射的 JSON 对象(我正在添加另一个属性)。


例如,


{

    "name" : "Example",

    "profileId" : "123",

    // and I am dynamically adding an attribute 'country'

    "country" : "US"

}

问题出在函数 A 处,我无法获取有关动态添加的属性(在本例中为“国家/地区”)的信息。


为动态添加的属性声明 getter 并不理想,因为动态添加的属性很多。


我已经尝试了 @JsonAnySetter 和 @JsonAnyGetter 的方向,但我得到了 400。我正在寻找其他解决方案。


请帮忙并提前致谢!(我简化了一些变量和函数的名称,但我希望它不会太难理解)。


VerificationBody 可以被认为如下:


public class VerificationBody {

    @JsonProperty(value = "name")

    String name,

    @JsonProperty(value = "profileId")

    Long profileId,

    // ... it does not include country

}

设法解决 400 问题,我可以通过 JsonAnyGetter 和 JsonAnySetter 获取属性。


慕的地6264312
浏览 184回答 5
5回答

慕尼黑5688855

您的VerificationBody课程可能如下所示:class VerificationBody {private String prop1;//other properties & their getters and setterprivate Map<String, ? extends Object> otherProps;// getter setters for&nbsp; otherProps}这将使您始终能够收到额外的属性,而不会出现任何扩展问题。

蝴蝶不菲

您可以使用HashMap类似的方法来解决此类问题:@RequestMapping(value = "/profiles/{profileId}/verify/", headers = "Accept=application/json", method = RequestMethod.POST)public void verifyBody(@RequestBody HashMap<String, HashMap<String, String>> requestData) {HashMap<String, String> customerInfo = requestData.get("verificationBody");String param1 = customerInfo.get("param1");//TODO now do whatever you want to do.}

不负相思意

请求体的注解是@RequestBody。由于请求正文是一个键值对,因此将其声明为 Map 是明智的做法。@PostMapping("/blog")public Blog create(@RequestBody Map<String, String> body){...}要提取相应的键及其值:String id = body.get("id");String title = body.get("title");String content = body.get("content");尝试使用此链接https://medium.com/better-programming/building-a-spring-boot-rest-api-part-ii-7ff1e4384b0b

米琪卡哇伊

您可以尝试VerificationBody像这样修改类:public class VerificationBody {&nbsp; &nbsp; private String name;&nbsp; &nbsp; private Long profileId;&nbsp; &nbsp; // getters & setters}getVerificationInformation像这样的类:@PostMapping(value = "/profiles/{profileId}/verify/",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;consumes = MediaType.APPLICATION_JSON_VALUE,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;produces = MediaType.APPLICATION_JSON_UTF8_VALUE)public Response getVerificationInformation (&nbsp; &nbsp; @RequestBody VerificationBody body) {

慕森卡

根本原因是您的 JSON 字符串无效,有效的字符串应该如下所示:{&nbsp; "name": "Example",&nbsp; "profileId": "123",&nbsp; "country": "US"}请确保每个键都用双引号引起来,否则在使用Jackson.顺便说一句,我正在使用 Spring Boot,我可以通过您的代码片段使用无效的JSON 字符串作为负载来重现获取 HTTP 状态代码 400。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java