当前位置: 首页 > 面试题库 >

在Spring中验证对象列表

顾鸣
2023-03-14
问题内容

我有以下控制器方法:

@RequestMapping(value="/map/update", method=RequestMethod.POST, produces = "application/json; charset=utf-8")
@ResponseBody
public ResponseEntityWrapper updateMapTheme(
        HttpServletRequest request, 
        @RequestBody @Valid List<CompanyTag> categories,
        HttpServletResponse response
        ) throws ResourceNotFoundException, AuthorizationException {
...
}

CompanyTag是这样定义的:

public class CompanyTag {
    @StringUUIDValidation String key;
    String value;
    String color;
    String icon;
    Icon iconObj;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }
   ...
}

问题是没有触发验证,没有验证CompanyTag列表,从不调用“ StringUUIDValidation”验证器。

如果我删除列表,仅尝试发送单个CompanyTag,即代替:

@RequestBody @Valid List<CompanyTag> categories,

利用:

@RequestBody @Valid CompanyTag category,

它可以按预期工作,因此显然Spring不喜欢验证事物列表(而是尝试使用数组,但同样没有效果)。

有人知道缺少什么吗?


问题答案:

我发现了另一种可行的方法。基本问题是你希望将列表作为服务的输入有效负载,但是javax.validation不会仅通过JavaBean来验证列表。诀窍是使用既可以用作List 又可以用作JavaBean 的自定义列表类:

@RequestBody @Valid List<CompanyTag> categories

改成:

@RequestBody @Valid ValidList<CompanyTag> categories

你的列表子类如下所示:

public class ValidList<E> implements List<E> {

    @Valid
    private List<E> list;

    public ValidList() {
        this.list = new ArrayList<E>();
    }

    public ValidList(List<E> list) {
        this.list = list;
    }

    // Bean-like methods, used by javax.validation but ignored by JSON parsing

    public List<E> getList() {
        return list;
    }

    public void setList(List<E> list) {
        this.list = list;
    }

    // List-like methods, used by JSON parsing but ignored by javax.validation

    @Override
    public int size() {
        return list.size();
    }

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }

    // Other list methods ...
}


 类似资料:
  • 使用: 它按照预期工作,所以Spring显然不喜欢验证事物列表(尝试使用数组,但也不起作用)。 有人知道缺了什么吗?

  • 我正在使用Springs的Webclient进行HTTP GET调用。 我如何验证响应对象的属性,我收到作为我的HTTP调用的响应。 我试图通过阻止响应对象来验证平板地图中的出生日期,但这看起来不是最有效的方法。 以下是我代码的摘录。 任何帮助都非常感谢。

  • 我有一个对象,其中包含对对象的引用,该对象有对对象的引用,为了使有效,必须具有对的有效且非空的引用。 问题是,不需要有效的、非空的才有效,所以我不能简单地将验证放在那里,我需要它在中。 这里有一个我正在谈论的类结构的简单伪版本: 我知道我可以用类级自定义验证注释来做到这一点,但问题是这些错误对象和相应的消息应用于类实例,而不是字段实例,我需要能够轻松地在正确的表单字段旁边显示错误消息。 有没有一个

  • 问题内容: 我试图从成功登录后实现接口的类(Spring 3.2.2和Spring Security 3.2.0 M1)中调用受保护的方法。这是我以前的问题。 该应用程序在以下环境下运行。 Spring 3.2.2 Spring Security 3.2.0 JPA 2.0 JSF 2.1.9 MySQL 5.6.11 JDK-7u11 NetBeans 7.2.1 我已经将以下与Spring安全

  • 我是Spring Boot和Spring Security的新手,继承了一个使用它们的webapp项目。我们将把webapp迁移到新的部署环境中。我们要改变的事情之一是认证机制,以便它能在新环境中运行。同时,我想使用一些现有的PostMan测试来测试RESTendpoint,绕过安全性。基本上,我想暂时禁用安全。 我有一个提供全局方法级安全性的类: 我有多个控制器类,例如,一个类 如果我尝试运行邮

  • 问题内容: 我使用sf.json库在Java Web应用程序中映射传入请求的表单数据。 可以说传入请求是http:// localhost:8080 / app / addProfile ,其表单数据为: 服务器端 : 这种方法的主要问题是,如果对结构进行少量修改,则需要修改整个代码。 有没有可以配置验证所需规则的api? 问题答案: 您可以使用Json验证器:-https: //github.c