【问题标题】:How to create a REST endpoint in Spring Boot Java without @SpringBootApplication, using only XML file?如何在没有@SpringBootApplication 的情况下仅使用 XML 文件在 Spring Boot Java 中创建 REST 端点?
【发布时间】:2023-09-16 21:15:01
【问题描述】:

我正在尝试在两个非 Web 应用程序之间实现一个 REST 端点,所有配置都在 XML 文件中。
我创建了一个简单的控制器,其方法只返回 "OK",因此我可以使用 Postman 运行一些测试。
不幸的是,没有创建端点。

我做了一些研究,发现我需要添加“上下文”标签,其中组件扫描指向控制器包才能工作。
但我目前的实现还不足以让它工作:

<context:component-scan base-package="com.app.REST"/>

我的控制器类是:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {

    @RequestMapping("/test")
    @ResponseBody
    public String test(){
        return "OK";
    }

}

我的问题是:有没有办法创建一个 REST 端点而不用 @SpringBootApplication 注释主类?如果是,我错过了什么?它是在我的 XML 文件中还是在其他地方?

【问题讨论】:

  • spring boot 应用如何在没有主类的情况下启动?
  • 您好,欢迎来到Stack Overflow! “我的问题是,无论如何创建一个没有使用@SpringBootApplication 注释的主类的端点 REST?” - null problemo! 但是为了运行那些“spring 应用程序”,我们以前(在 spring boot 之前)使用了称为“Web 应用程序服务器”的东西(然后将应用程序打包成一个“.war”并将其部署在那里......其中一个(已经在运行main 方法,希望)带来了一些端点。)
  • "如果是,我在 xml 配置文件中是否缺少其他信息?" - 我缺少一些(xml)父元素,“标题”......但内容可能就足够了。 (控制器包是com.app.REST?)

标签: java xml spring spring-boot endpoint


【解决方案1】:

要启用 MVC 功能,您需要指示 spring 扫描您的控制器 这是通过&lt;mvc:annotation-driven /&gt; 标签完成的。

由于 DispatcherServlet 正在处理您的请求,您需要在 web.xml 中为其添加正确的配置

....
<servlet>
        <servlet-name>my-dispatcher-servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:web-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher-servlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

乐:

&lt;mvc:annotation-driven&gt;&lt;context:component-scan&gt; 类似,它们注册所有带有@Controller、@Component、@Service、@Repository 和@Bean 注释的bean...

mvc:annotation-driven 的主要区别在于它还创建了一些额外的 bean,这些 bean 负责在 dispatcherServlet 中注册端点(例如 HandlerMapping、HandlerAdapters 和一些默认的转换服务,用于表示您在控制器中接收到的数据)

【讨论】:

  • Alex Ciocan,非常感谢您的帮助。在将这些信息添加到 web.xml 并创建一个新的调度程序 xml 文件后,它终于工作了!
  • 嗨,Jomj,不要忘记接受正确的答案。感谢您的支持。快乐编码:)
最近更新 更多