相关疑难解决方法(0)

Spring中@Valid和@Validated之间的区别

Spring支持两种不同的验证方法:Spring验证和JSR-303 bean验证.两者都可以通过定义一个Spring验证器来使用,该验证器委托给其他委托者,包括bean验证器.到现在为止还挺好.

但是当注释实际请求验证的方法时,这是另一个故事.我可以像这样注释

@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {
Run Code Online (Sandbox Code Playgroud)

或者像这样

@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {
Run Code Online (Sandbox Code Playgroud)

这里,@ Validjavax.validation.Valid,而@Validated是org.springframework.validation.annotation.Validated.后者的文档说

JSR-303的变体有效,支持验证组的规范.设计方便使用Spring的JSR-303支持,但不支持JSR-303特定.

这没有多大帮助,因为它没有确切地说明它是如何不同的.如果有的话.两者似乎都对我很好.

java validation spring spring-mvc

80
推荐指数
4
解决办法
6万
查看次数

验证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万
查看次数

绑定到Controller方法中的集合的RequestBody参数的Spring验证

我有

实体:

package org.ibp.soq;

public class MyEntity {

    private String field1;
    private String field2;

    //..getters and setters

}
Run Code Online (Sandbox Code Playgroud)

实体的验证者:

package org.ibp.soq;

import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

@Component
public class MyEntityValidator implements Validator {

    @Override
    public boolean supports(Class<?> clazz) {
        return MyEntity.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        MyEntity myEntity = (MyEntity) target;
        // Logic to validate my entity
        System.out.print(myEntity);
    }

}
Run Code Online (Sandbox Code Playgroud)

具有批量PUT方法的REST控制器:

package org.ibp.soq;

import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import …
Run Code Online (Sandbox Code Playgroud)

validation spring

7
推荐指数
2
解决办法
7430
查看次数

标签 统计

spring ×3

validation ×3

java ×2

list ×1

spring-mvc ×1