Java 使用@RequestBody时严格执行Json

Java 使用@RequestBody时严格执行Json,java,json,spring,rest,jackson,Java,Json,Spring,Rest,Jackson,我注意到,在使用@RequestBody MyObject时,如果您没有在json中指定所有参数,那么它们将被赋予默认值 public class MyObject { @JsonCreator public MyObject (@JsonProperty("a") long a, @JsonProperty("b") double b, @JsonProperty("c") String c,

我注意到,在使用@RequestBody MyObject时,如果您没有在json中指定所有参数,那么它们将被赋予默认值

public class MyObject {

    @JsonCreator
    public MyObject (@JsonProperty("a") long a,
                     @JsonProperty("b") double b,
                     @JsonProperty("c") String c,

}
因此,json请求如下所示:

{
 "a" : 0
}
public class MyObject {
    @NotNull private Long a;
    @NotNull private Double b;
    @NotNull private String c;

   // And so on... 

}
一旦反序列化,将生成以下内容

c == null, b == 0.0, a = 0
requestbody反序列化json的控制器方法如下:

@RequestMapping(value = {"/doSomething/"}, method = RequestMethod.POST)
@ResponseBody void something(@RequestBody MyObject myObject) {
    //  Logic here. 
}
在将json解析为对象时,是否有某种方法可以强制执行requestbody以确保所有参数都存在

编辑:

例如,字符串将被赋予null值,而double将被赋予0.0的值


从我所读到的内容来看,这是我正在使用的杰克逊图书馆的预期。目标是了解当json被反序列化到对象中时,是否缺少json属性,而不是让它们自动指定默认值

我通过在带有@valid注释的对象上实现一些验证来解决这个问题。(javax.validation.Valid)

控制器现在在requestbody旁边有一个@Valid注释和一个bindingresult对象,这将允许我检查绑定是否成功

@RequestMapping(value = {"/doSomething/"}, method = RequestMethod.POST)
@ResponseBody void something(@Valid @RequestBody MyObject myObject, BindingResult bindingResult) {

    if (bindingResult.hasErrors()) {
        return bindingResult.toString();
    }

}
我的对象现在看起来如下所示:

{
 "a" : 0
}
public class MyObject {
    @NotNull private Long a;
    @NotNull private Double b;
    @NotNull private String c;

   // And so on... 

}
相反,将原语类型切换为对象意味着,如果json中缺少这些值,则会尝试为它们提供无效的空值来解决我的问题


此处的更多信息:

请举例说明您注意到的问题。我已更新了问题。我似乎有一个问题,所以我的大部分问题没有得到回答,所以任何关于命名/措辞/解释的建设性建议都将不胜感激。您想知道是否有失踪成员?通过异常?异常会起作用。我只需要知道json何时无效,这样我就可以停止继续。