我有一个jax-rs资源,我试图转换为spring boot . 我让它们工作,但看起来像一些jax-rs资源,它们作为其他项目的依赖项包含在项目中 . 我知道这应该是一项服务!无论如何所以我可以对该库进行更改并使它们与mvc兼容,但是还有另一种方法可以让spring servlet同时工作吗?我使用所有基于java的配置btw no xml .
主要的应用程序类目前注释如下,除非我在url-mapping中添加“/”,这样可以解决这个问题 . 如果调度程序servlet可以为每个/请求找到处理程序,我甚至不知道为什么我应该添加它 .
@SpringBootApplication(exclude = { EmbeddedServletContainerFactory.class })
@EnableAsync
@ImportResource(value = { "classpath:springmvc-resteasy.xml" })
public class Application implements AsyncConfigurer, DisposableBean { .. }
我认为使用上面的Spring DispatcherServlet仍处于控制之前,它知道休息容易处理的dropradapter . 默认情况下,启动也会映射'/'下的所有内容,所以我不明白为什么它不起作用 . 我在击中jax-rs uri时得到404,spring mvc uri正常工作 .
我尝试添加以下内容,但之后一切都停止了 .
@Bean
public ServletRegistrationBean initServlet(DispatcherServlet dispatcherServlet) {
ServletRegistrationBean servletRegistrationBean
= new ServletRegistrationBean(dispatcherServlet, false,"/jaxrs-api/*", "/mvc-api/*");
servletRegistrationBean
.setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
return servletRegistrationBean;
}
我可以看到在上下文初始化时正在加载以下bean以便重新安装 .
resteasy.deployment
resteasy.registry
resteasy.dispatcher
resteasy.providerFactory
resteasy.spring.bean.processor
abstract.resteasy.handlerMapping
resteasy.handlerMapping
resteasy.handlerAdapter
resteasy.exception.handler
resteasy.no.resource.found.view
reateasy.error.view.resolver
1 回答
看起来事情在经过一些尝试和错误后再次开始工作,这不是应该的方式! Spring-boot真的应该在这里记录它如何与spring mvc和jax-rs共存 .
这是我所做的一系列改变 .
我将@EnableWebMvc添加到我的Application.java类中,或者它可以在任何其他@Configuration类上
事后来看,我知道这会产生一些问题而且确实存在!我的其他MessageConverter停止工作 . 我在Application.java中有以下内容
现在我不得不将它移动到另一个配置类,它覆盖WebMvcConfigurerAdapter来定制spring mvc bean .
所以看起来现在Spring MVC有一些控制而不是Spring Boot . 我确信当我有一些额外的组件,例如swagger2集成或类似的东西时,这将会破裂 .