Java 使用@RequestBody时严格执行Json
我注意到,在使用@RequestBody MyObject时,如果您没有在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,
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何时无效,这样我就可以停止继续。