当前位置: 首页 > 知识库问答 >
问题:

@Requestbody没有获取我的JSON对象Spring Boot

罗昊明
2023-03-14

我在下面显示了我的代码片段,我试图发送jsonobj作为Reuestbody,我的控制器无法分配请求的值。

{
    "Request":
        {
        "ReferenceNumber" : "ILT06240123201694516287",
        "B_Code" : 1,
        "B_Code":"888asdad88",
        "Request":"11111111111111111"
        }
}
@RequestMapping(value="/GetAccountDetails",method = RequestMethod.POST)
    public ResponseEntity<AccountListResponse> GetAccountDetails(@RequestBody @Valid CBSAccountRequest cbsAccountReq
            ,BindingResult result) {
        if(result.hasErrors()) {
            throw new InvalidException("Not Valid",result);
        }
        else {
            AccountListResponse accountListResponse=new AccountListResponse();
            return new ResponseEntity<AccountListResponse>(accountListResponse, HttpStatus.OK); 
        }
    }
public class CBSAccountRequest {

    @NotNull
    @Size(min=25,max=25,message="Reference number should have 25 characters")
    private String ReferenceNumber;
    @NotNull
    @Digits(integer=1,fraction = 0 )
    private int B_Code;
    @NotNull
    @Size(min=5,max=5, message="Invalid Branch Code")
    private String B_Code;
    @NotNull
    @Size(min=17,max=17 ,message="Invalid Account Number")
    private String Request;
    //getters and setters
}

我得到异常,因为@Valid。我经历了很多与此相关的问题,但没有一个对我有用。我预测这个问题可能会因为JSON对象结构而发生。我也尝试了下面的对象也不工作。

{
    "ReferenceNumber" : "ILT06240123201694516287",
    "B_Code" : 1,
    "B_Code":"888asdad88",
    "Request":"11111111111111111"
}

共有3个答案

岑光熙
2023-03-14

还要考虑这一点:在POJO中命名变量的Java约定要求第一个变量用小写。但是,您可以使用@JsonNaming注释来重写它。看看这些线索:https://stackoverflow.com/questions/38935912/requestbody-is-getting-null-values/38939812#38939812

1:@RequestBody正在获取空值,@RequestBody正在获取空值

您还可以阅读:Jackson属性自定义命名策略

这个线程也会有帮助:不区分大小写的JSON到POJO映射,而不改变POJO

邹英悟
2023-03-14

问题是你的JSON是无效的

{
    "ReferenceNumber" : "ILT06240123201694516287",
    "B_Code" : 1,
    "B_Code":"888asdad88",
    "Request":"11111111111111111"
}

您的请求有效负载中有重复的钥匙B_代码。

以下是您可以做的:

  1. 更改json中字段B_code的名称
  2. 更改Java中字段B_code的名称,它与Java命名约定不匹配
  3. 确保json中没有重复的字段
  4. 如果字段名与java中的字段名不同,则需要注释@JsonProperty来更正它
杭英杰
2023-03-14

在我看来,您发送的JSON请求具有错误的结构。在JSON中,外部“请求”元素是多余的。尝试发送以下请求:

{
  "ReferenceNumber" : "ILT06240123201694516287",
  "B_Code" : 1,
  "B_Code":"888asdad88",
  "Request":"11111111111111111"
}

顺便说一句,作为一个建议。您可以对字段使用java命名约定,并且您仍然可以使用@JsonProperty注释将B_Code等名称映射到它们:

@JsonProperty("B_Code")
String bCode;
 类似资料:
  • 问题内容: 我有一个AJAX请求返回的json对象,而我遇到了一些麻烦,因为它一直在返回。只想知道我是否使用正确: 它们都是有效对象,即使它们都返回。 更新: 返回了JSON对象的示例: 问题答案: 你可以用这样的东西

  • 问题内容: 我有一个网址,返回的是这样的JSON对象: 我想获得价值。那么如何通过PHP检索它呢? 问题答案: $json = file_get_contents(‘url_here’); $obj = json_decode($json); echo $obj->access_token; 为此,需要启用它。可以通过在运行时完成以下操作来实现: 您也可以使用获取网址。要使用卷曲,可以使用中发现的

  • 我有一个名为AnimalsData的文件,它有一个由数组组成的对象。数组由一个对象和另一个数组组成。它看起来像这样: 我的HTML文件如下所示: 我正试图获取的值的类名对象从动画类数组。我一直在使用以下两个stackoverflow页面作为指南: 访问JSON数组中的对象和访问/处理(嵌套)对象、数组或JSON 我有另一个javascript文件,其中包含以下内容: 编辑我将for in循环中的"

  • 我有一个返回JSON对象的URL,如下所示: 我想从URL获取JSON对象,然后获取值。 那么如何通过PHP检索它呢?

  • 问题内容: 这是我要在这里实现的目标: 从数据库获取文件名和ID的列表 在网络路径上搜索这些文件 存储未找到的文件的任何ID 在第二个数据库中搜索该ID 在网络路径上搜索这些文件 列出所有在两个位置均未找到文件的ID。 我遇到的问题是尝试使用我收集的结果中的文件名。 运行代码时,会显示从数据库收集的原始JSON数据,但是当尝试仅列出文件名时,我什么也没得到(甚至没有错误) 关于如何解决此问题并以一

  • 问题内容: 要从内存缓存中获取密钥(使用pylibmc),请执行以下操作: Redis中的相同之处在于: 最后一行对我来说并不正确。Redis似乎只返回字符串。是否有get redis以与放入对象相同的形式返回对象? 问题答案: 区别在于,尽管memcached和Redis仅支持字符串值,但使用序列化您发送的值,只是将它们转换为字符串。 如果要对Redis进行同样的操作,则可以使用自己的功能为您做