java - 使用 Java 配置的 Spring 4 REST 应用程序(无 xml) IllegalArgumentException

标签 java spring rest spring-mvc configuration

这让我发疯。我已经完成了大量 Spring 编码,但这是我第一次尝试在 Java 中进行所有配置。我在 stackoverflow 和其他地方进行了搜索,虽然其他人也看到了这个问题,但他们的解决方案都不适合我。

这是我的源文件:

初始化器:

public class EnhancedCandidateInfoInitializer extends  AbstractAnnotationConfigDispatcherServletInitializer {
    private static final Logger logger = LoggerFactory.getLogger(EnhancedCandidateInfoInitializer.class);

    @Override
    protected Class<?>[] getRootConfigClasses() {
        logger.info("@@@@@ getRootConfigClasses called - returning null @@@@@");
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        logger.info("@@@@@ getServletConfigClasses called returning EnhancedCandidateInfoWebConfiguration.class @@@@@");
        return new Class[] { EnhancedCandidateInfoWebConfiguration.class    };
    }

    @Override
    protected String[] getServletMappings() {
        logger.info("@@@@@ getServletMappings called @@@@@");
        return new String[] { "/" };
    }
}

WebMvc配置:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.mojorank.restapi"})
public class EnhancedCandidateInfoWebConfiguration extends WebMvcConfigurerAdapter {
    private static final Logger logger =  LoggerFactory.getLogger(EnhancedCandidateInfoWebConfiguration.class);
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        logger.info("#### My Configuration handler was called ####");
        configurer.enable();
    }
}

Controller :

@RestController
public class EnhanceCandidateInfoController {
    @RequestMapping("/")
    public String welcome() {//Welcome page, non-rest
        return "Welcome to RestTemplate Example.";
    }

    @RequestMapping("/hello/{player}")
    public Message message(@PathVariable String player) {//REST Endpoint.

        Message msg = new Message(player, "Hello " + player);
        return msg;
    }
}

当我构建应用程序并将其部署到 tomcat 时,我得到以下异常堆栈跟踪:

Caused by: java.lang.IllegalArgumentException: Failed to register servlet with name 'dispatcher'.Check if there is another servlet registered under the same name. at org.springframework.util.Assert.notNull(Assert.java:115) at org.springframework.web.servlet.support.AbstractDispatcherServletInitializer.registerDispatcherServlet(AbstractDispatcherServletInitializer.java:98) at org.springframework.web.servlet.support.AbstractDispatcherServletInitializer.onStartup(AbstractDispatcherServletInitializer.java:71) at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5274) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

正如我所说,我已经搜索了 stackoverflow 和其他地方,发现其他人也有同样的问题,但是当我尝试实现建议的修复时,我的问题仍然存在。预先感谢您的帮助。

最佳答案

将您的 WebMvcConfiguration 方法更改为:

public class EnhancedCandidateInfoWebConfiguration extends WebMvcConfigurerAdapter {     

       @Override            
        public void configureViewResolvers(ViewResolverRegistry registry) {
            InternalResourceViewResolver ivr=new InternalResourceViewResolver();
            ivr.setPrefix("/WEB-INF/jsp/");
            ivr.setSuffix(".jsp");
            ivr.setExposeContextBeansAsAttributes(true);
            registry.viewResolver(ivr);
        }
    }

关于java - 使用 Java 配置的 Spring 4 REST 应用程序(无 xml) IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45749590/

相关文章:

java - 如何使用 VersionOne JAVA SDK 中的 'WHERE'

java - 从字符串中取出(n)个字符

java - 如何在 Linux 上使用 SIGAR 和 maven?

Java短延时

java - Cometd,Spring 安全 : Currently authenticated user not available inside a Listener

spring - Spring MVC 中的 ApplicationContext 和 WebApplicationContext 有什么区别?

rest - Linkedin API oAuth 2.0 REST 查询参数

java - 如何指定自定义自由特征的依赖特征

javascript - 如何将音频 blob 从 javascript 发送到 java spring 服务器?

javascript - 在父组件获取 API 数据后同步子组件以接受 props