java - 为什么我的 Spring Boot Controller 不自动连接 validator ?

标签 java spring spring-mvc spring-boot spring-validator

我有一个具有以下功能的 Controller :

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import javax.validation.Validator;

@RestController
@RequestMapping("/")
public class MyController {

    @Autowired
    private Validator validator;

    //..elided...

    @GetMapping
    public String getSomething(@Valid @RequestBody MyRequest) {

        //This is null
        if ( validator == null ) {
            throw new Exception("is null");
        }
    }
}

我的配置类:

package com.app.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;


@Configuration
@EnableWebMvc
@ComponentScan("com.app")
public class ValidationConfig {

    @Bean
    public Validator validator() {

        return new LocalValidatorFactoryBean();
    }

    /* //Including this doesn't help
    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
        methodValidationPostProcessor.setValidator(validator());
        return methodValidationPostProcessor;
    }*/
}

Gradle :

buildscript {
    ext {
        springBootVersion = "1.5.6.RELEASE"
    }
        repositories {
        mavenCentral()
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: "java"
apply plugin: "eclipse"
apply plugin: "org.springframework.boot"
apply plugin: "idea"
apply plugin: "jacoco"

jar {
    baseName = "my-service"
    version = "0.0.1-SNAPSHOT"
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {

    //Spring Boot
    compile("org.springframework.boot:spring-boot-starter")
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-actuator")

    //Testing
    testCompile("org.hamcrest:hamcrest-all:1.3")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

无论我做什么,我的 Controller 中的 validator 都是空的!

最佳答案

在您的 Controller 中,您需要一个javax.validation.Validator,但在配置中您正在使用org.springframework.validation.Validator

关于java - 为什么我的 Spring Boot Controller 不自动连接 validator ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46268980/

相关文章:

java - 不可读的 POM {path} 输入不包含数据

java - 我如何知道应该在 Android 的 JNI 中添加哪些库?

java - Spring Boot 中的每个@RequestBody 都需要一个单独的对象吗

java - Spring-MVC 无缘无故打开新标签

java - Spring MVC 调度程序 servlet.xml 错误

java - 如何在java中根据国家代码获取语言代码

java - 如何读取作为命令参数的文本文件(字符串)的第一行(在Java中使用eclipse)

spring - MockBean stub 无效

java - 在 Spring jdbc 中使用 jdbctemplate 返回 boolean 值

java - 将 HttpServletRequest 获取到 Spring ResponseEntityExceptionHandler 中