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

包含嵌套的不同类型对象的json主体的spring binding result

袁开宇
2023-03-14

我有一个场景,其中 json 请求由不同的自定义对象组成,例如:

{
 "person:":{
    "name":"xyx",
    "age":25
  },
  "movieList":[
     {
       "name":"yyy",
       "duration":34,
       "language":"english"
     },
     {
       "name":"zzz",
       "duration":37,
       "language":"english"
     }
   ]

}

java类看起来像

public class Customer{
 private Person person,
 private List<MovieList> movieList;
}

验证条件:字段不能为空

现在来到Spring控制器,我想验证来自请求的每个对象,并且我能够验证整个客户对象,因为BindingResault应用于整个请求主体。但是我的要求是分别验证个人对象和电影列表对象。

public void createCustomer(@RequestBody Customer customer,BindingResult result){
}

而且我的要求是抛出特定对象的异常,这会导致异常发生,因为我的框架是这样设计的。

共有2个答案

乐正锦
2023-03-14

首先,记下个人电影列表的验证代码(基于自定义验证或注释)。正如您所说,您要分别验证PersonMovieList对象,您可以编写它们的验证器,然后进行手动验证:

validator.validate(person, bindingResult);  
if (bindingResult.hasErrors()) {  
    //throw your exception for person object  
}

validator.validate(movieList, bindingResult);  
if (bindingResult.hasErrors()) {  
    //throw your exception for movieList object  
}//Or iterate through each object

要抛出异常,可以根据是字段错误还是对象错误来抛出。

for (Object object : bindingResult.getAllErrors()) {
    if(object instanceof FieldError) {
        FieldError fieldError = (FieldError) object;
        //throw error
    }

    if(object instanceof ObjectError) {
        ObjectError objectError = (ObjectError) object;
        //throw error
    }
}

希望有帮助!

江琦
2023-03-14

您可以使用spring framework中的验证注释。它将验证来自POJO的每个字段。请检查下面的例子。在MovieList中使用相同的方法。

import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Email;

public class Person{

@NotNull(message = "Name cannot be null")
private String name;

@AssertTrue
private boolean working;

@Size(min = 10, max = 200, message = "About Me must be between 10 and 200 characters")
private String aboutMe;

@Min(value = 18, message = "Age should not be less than 18")
@Max(value = 150, message = "Age should not be greater than 150")
private int age;

@Email(message = "Email should be valid")
private String email;

// standard setters and getters 
 }
 类似资料:
  • 问题内容: 我一直在尝试搜索包含嵌套字段的文档。我创建了这样的嵌套映射: 我的搜索如下所示: 但是我收到此错误消息: 编辑 我仍然收到此错误。我正在通过Java执行此操作,因此这是我要创建的文档: 像这样创建索引: 我认为我可能对文档编制了错误的索引。 问题答案: TLDR:输入您的嵌套类型。 假设我们有一个普通类型,并且嵌套了另一个类型: 该行是分配给的嵌套查询所必需的,如下所示: 该行似乎仅在

  • 我有一个带有嵌套字段的JSON: 我正在使用JSONPATH从嵌套中获取。 我已经将我的JSON文本粘贴到了http://jsonpath.com/这个网站上;并且在使用了这一行之后: 我得到了这个: 使用此行后: 我得到了这个: 我尝试返回(输出)的内容如下: 但是我找不到合适的语法来将这两个组合在一行中,并用一个JSONPATH查询返回它们。

  • 我已经编写了在android studio上显示可扩展列表视图的代码。以下是ExplandableListView的代码: 这是执行操作的方法: 它在函数定义中的“groupPosition”处显示警告: 当鼠标悬停在上面时,会显示

  • 问题内容: 是否有可能创造 ; 我的意思是将来自不同类的对象添加到一个arraylist? 谢谢。 问题答案: 是的,有可能: 该列表将接受任何实现的对象。

  • 我想在swagger中建模一个包含一组不同类型对象的响应对象,如下所示: 我尝试了下面的解决方案,但它将所有属性包装在一个对象中 { [ { "用户": [], "客户": [] } ] }.