这让我发疯。我已经完成了大量 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/