【问题标题】:Can I have in the same Spring project a URL to show my views and another for a REST API?我可以在同一个 Spring 项目中有一个 URL 来显示我的视图和另一个用于 REST API 吗?
【发布时间】:2017-11-30 20:31:29
【问题描述】:

我需要创建一个能够呈现视图(使用 JSP)的项目,并且我还需要提供一个 REST API。

可以将所有这些都放在同一个项目中吗?

这些 URL 将如何工作以访问每个事物?

谢谢!

【问题讨论】:

标签: spring rest api jsp


【解决方案1】:

如果您尝试遵循 REST 的严格 Roy Fielding-like principles,那么可能不会。

但是,如果您只是想要一个松散意义上的 REST API,可以说是一个返回资源(JSON、HTML、文档等)的接口,当然。这样想吧。大多数 Web 应用程序(呈现视图的应用程序)也会有某种形式的 AJAX 调用,AJAX 调用只是调用返回一些 JSON(或其他内容)的 REST API(~ish),然后 JavaScript 将解析响应并在视图上渲染一些东西。

因此,大多数由 AJAX 提供支持或辅助的现代网站将混合使用 REST API 和视图呈现 API。

呵呵。我只是让世界各地的 REST 开发人员畏缩不前。

现在,这是一个好习惯吗?那完全是另一回事了。如果您谈论的是基于 GUI 的大型应用程序和使用 REST API 的大型应用程序,通常您不会混合使用它们。事情变得混乱,模块化对于维护来说非常棒。同样值得一提的是,通常如果您使用 100% RESTful,那么您可能需要的 UI 开发技术将不再可用,因为您开始跟踪状态等。但是,如果它的东西很小或与 UI 相关,那就去吧!

至于 URL,请考虑一下。你标记了 Spring 所以,我正在使用它。

//I will render a view!
@RequestMapping("/blah")
public String blah(Model model){
    return "/view/blah";
}

//I return a JSON string of "/view/blah"
@RequestMapping("/blah")
public @ResponseBody String blah(Model model){
    return "/view/blah";
}

这两个都在@Controller 中,它们都在做同样的事情,但是@ResponseBody 在非常非常松散的意义上使第二个成为 REST 服务,因为它告诉 Spring 你正在返回什么是响应,而不是从中呈现视图。如果你设置了 ViewResolver,Spring 只会尝试渲染视图。

Baeldung 有 great breakdown 的 RESTful 控制器与 Spring 中的非控制器,是的,它们可以在同一个应用程序中使用。

希望对您有所帮助!

【讨论】:

    【解决方案2】:

    是的,您可以在应用程序中混合使用经典的 @Controller 和提供基于 JSP 的视图的配置和 @RestController,正如您可以从官方 javadoc 中看到的那样,这是一个

    一个便利的注解,它本身用@Controller 和注解 @ResponseBody。

    【讨论】:

      【解决方案3】:

      是的,您可以,只需注意您在控制器中配置的 url,使用 @RequestMapping 为应用程序中的每个路径配置正确的 URL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 2021-06-15
        • 2011-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多