1

我正在研究一个春天的例子。我找到了以下代码。我无法理解构造函数。一个验证器接口被传递给这个函数。这个验证器是如何生成的?提前致谢。

@Controller
@RequestMapping(value="/account")
public class AccountController {

    private Map<Long, Account> accounts = new ConcurrentHashMap<Long, Account>();

    private Validator validator;

@Autowired
public AccountController(Validator validator) {
    this.validator = validator;
}

@RequestMapping(method=RequestMethod.POST)
public @ResponseBody Map<String, ? extends Object> create(@RequestBody Account account, HttpServletResponse response) {
    Set<ConstraintViolation<Account>> failures = validator.validate(account);
    if (!failures.isEmpty()) {
        response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
        return validationMessages(failures);
    } else {
        accounts.put(account.assignId(), account);
        return Collections.singletonMap("id", account.getId());
    }
}
4

3 回答 3

1

验证器可以是任何实现 Springs Validator接口并在当前应用程序上下文中可用的类。默认情况下,Spring 按类型自动装配。这意味着每个实现Validator接口的 bean 都可以满足AccountController. 我不知道确切的例子,但AccountValidator在应用程序上下文中可能有类似 bean 的东西。

请注意,如果应用程序上下文中有多个验证器 bean,则此方法可能会导致问题。

有关接口的详细信息,请参阅spring 文档中的验证部分。Validator

于 2013-09-12T12:27:07.230 回答
0

Validator 必须有一些具体的实现。没有它是不可能的。进一步支持我的回答,看看它是@Autowired。请发布您正在学习的链接或检查源代码是否存在验证器类。

另外,检查这个链接默认情况下没有具体的实现。

于 2013-09-12T12:44:58.227 回答
0

当您在构造函数上使用 Autowired 时,Spring 会寻找 Validator 实现/

在这个例子中,Spring 注入了它的默认 Validator 实现:org.springframework.validation.beanvalidation.LocalValidatorFactoryBean

这里有更多:部分:5.7.2.1 注入验证器

http://docs.spring.io/spring/docs/3.0.0.RC3/reference/html/ch05s07.html

于 2013-09-12T13:39:39.597 回答