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

不存在可选字段与rest请求正文中存在空值字段之间的差异

包和泰
2023-03-14

有没有一种方法可以检查可选字段是出现在空值的请求正文中,还是根本不在请求正文中。我有一个要求,如果一个可选字段的值设置为空,我们需要一个异常,但如果字段根本不存在,这被认为是好的。

在下面的示例中,operatorName是一个可选字段:

Invalid Case:
{
    "creationDateTime": "2019-10-08",
    "requestedAmount": "2499",
    "operatorPhone": "1234567890",
    "operatorName": null 
}

Valid Case:

{
    "creationDateTime": "2019-10-08",
    "requestedAmount": "2499",
    "operatorPhone": "1234567890"
}

请建议是否有办法知道请求中是否存在运算符Name。缺省情况下,Java 将值设置为空值是字段不存在。

共有2个答案

史昊焱
2023-03-14

在模型/Dto 中的运算符名称上方添加@NotNull。

洪河
2023-03-14

您可以使用@JsonInclude(JsonInclude.Include.NON_NULL)

如果您使用类映射请求,默认情况下,Java将值设置为null is field不存在。

您可以使用Map获取请求数据而不是类并检查键,

@PostMapping(value = "/process", consumes = APPLICATION_JSON_VALUE)
public ResponseEntity<String> process(@RequestBody Map data, HttpServletRequest request) throws IOException {
    if (data.containsKey("operatorName") && null == data.get("operatorName"))
        return ResponseEntity.badRequest().body("operatorName can not be null");
    //valid process
    return ResponseEntity.ok("success");
}
 类似资料:
  • 问题内容: 我有一个最大字符范围为16的字符,每4个字符后,我要添加一个负字符或空格,然后编写其余的字符,例如本示例5022-2222-2222-2222。有我的代码,但是那不起作用,该怎么办? 我在 范围方法中添加此代码。 问题答案: 我们可以从实现oisdk:s SwiftSequence 方法的(版本号)的Swift 3版本开始: 在这种情况下,实现自定义格式是创建4个字符的块并将其通过“-

  • null 我看到的是一般的注释 可用于排除空值。我不能使用此方法,因为我仍然希望在json中看到具有空值的空字段 可以用来排除空值和“不存在”的值。我不能使用这个,因为我仍然想看到JSON中的空字段和空字段。与相同 所以我的问题是,如果我不指定这些属性中的任何一个,我能实现我想要的吗?换句话说,如果我没有指定其中的任何一个,那么Jackson的行为是显示所有在动态意义上具有空值的字段吗?我主要关心

  • 问题内容: 在golang中,有没有办法查看是否可以将解编入结构的json字段与设置为null的json字段区分开?因为两者都将struct中的值设置为nil,但是我需要知道字段是否以该字段开头,并查看是否有人将其设置为null。 VS 当解组为结构时,两个json均为零。任何有用的资源将不胜感激! 问题答案: 使用以“拖延”解组过程决定做某件事之前要确定原始字节: 参观游乐场https://pl

  • 我已经使用spring@Cacheable进行缓存,如下所示: 现在我希望只有在Request.getid()!=3的情况下才缓存此方法调用,其中是Request类中的公共getter方法。 我见过这样的代码:人们在中指定了条件,但我见过只在方法响应时指定条件,而不是在请求时指定条件。参考:我如何告诉Spring cache不在@Cacheable注释中缓存空值 在请求的字段上指定条件时,有没有任

  • 我正在尝试保存两个LocalDateTimes之间的差异。所以实际上,我正在寻找一个类似Period的类,它允许我将日期保存为时间(因为Period只允许我保存日期)。 哪个班会让我这么做?

  • 问题内容: 我试图通过使用查询在Access中创建一个计算。目前,一个查询计算出“ MPP油”的值(最大生产潜力),而另一个查询需要使用该值来计算“未分配的损失”。这些计算使用来自基本查询“ PEBaseQuery”的公司/资产/年份数据。其他输入值(用于计算未分配的损失)使用ID引用…虽然我的代码似乎有误,请帮忙! 问题答案: 从您在评论中提到的错误: 错误“您试图执行不包含指定表达式“ Com