相关疑难解决方法(0)

验证Spring中的对象列表

我有以下控制器方法:

@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 {
...
}
Run Code Online (Sandbox Code Playgroud)

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;
    }
   ...
}
Run Code Online (Sandbox Code Playgroud)

问题是未触发验证,未验证CompanyTag列表,从不调用"StringUUIDValidation"验证器.

如果我删除了List并且只尝试发送一个CompanyTag,即代替:

@RequestBody @Valid List<CompanyTag> categories,
Run Code Online (Sandbox Code Playgroud)

使用:

@RequestBody @Valid CompanyTag category,
Run Code Online (Sandbox Code Playgroud)

它按预期工作,所以显然Spring不喜欢验证事物列表(尝试使用数组,但也没有用).

任何人都知道缺少什么?

java validation spring list

42
推荐指数
10
解决办法
4万
查看次数

Spring MVC - REST服务中bean列表上的@Valid

在Spring MVC REST服务(json)中,我有一个像这样的控制器方法:

@RequestMapping(method = RequestMethod.POST, value = { "/doesntmatter" })
@ResponseBody
public List<...> myMethod(@Valid @RequestBody List<MyBean> request, BindingResult bindingResult) {
Run Code Online (Sandbox Code Playgroud)

MyBean类具有bean验证注释的位置.

在这种情况下似乎没有进行验证,尽管它适用于其他控制器.

我不想将列表封装在dto中,这将改变json输入.

为什么没有对bean列表进行验证?有哪些替代方案?


java rest spring spring-mvc bean-validation

33
推荐指数
3
解决办法
3万
查看次数

kotlin和@Valid Spring注释

我有一个实体:

class SomeInfo(
        @NotNull @Pattern(regexp = Constraints.EMAIL_REGEX) var value: String) {
    var id: Long? = null
}
Run Code Online (Sandbox Code Playgroud)

和控制器方法:

@RequestMapping(value = "/some-info", method = RequestMethod.POST)
public Id create(@Valid @RequestBody SomeInfo someInfo) {
       ...
    }
Run Code Online (Sandbox Code Playgroud)

@Valid 注释不起作用.

看起来Spring需要一个默认的无参数构造函数,而上面的花哨代码变得像这样丑陋(但工作):

class SomeInfo() {

    constructor(value: String) {
            this.value = value
        }

        @NotNull @Pattern(regexp = Constraints.EMAIL_REGEX) 
        lateinit var value: String

        var id: Long? = null
    }
Run Code Online (Sandbox Code Playgroud)

有什么好的做法让它不那么罗嗦?

谢谢.

spring spring-mvc kotlin

24
推荐指数
3
解决办法
6975
查看次数

标签 统计

spring ×3

java ×2

spring-mvc ×2

bean-validation ×1

kotlin ×1

list ×1

rest ×1

validation ×1