【问题标题】:RESTful Webservice Using Spring Framework使用 Spring 框架的 RESTful Web 服务
【发布时间】:2017-01-12 01:51:21
【问题描述】:

我已经使用 Spring Framework 编写了一些 RESTful Web 服务(通过阅读在线帖子/视频教程等),但是我仍然有一些疑问。

当我们使用 Spring MVC 模块编写Web应用程序时,我们使用控制器代码,类似于以下:

@Controller
public class SimpleController {

    @RequestMapping("/welcome")
        ModelAndView handleIncomingWelcomeReq() {

        ModelAndView mw = new ModelAndView("WelcomePage","welcomeKey","WelcomeKey's value!");

        return mw;
    }

}

在上面的代码中有这个控制器返回的 ModelAndView 对象,可以像这个 URL 一样调用它:

http://localhost:8080/contextRoot/welcome

现在,如果我们排除“视图”部分并仅返回模型,它会不会像 Web 服务一样运作?

所以我的疑问是,在 Spring 中我们是否使用相同的 API/jar 来创建 Web 应用程序或 RESTful Web 服务?

我读到的是,对于 Spring REST 支持,它有注释 @RestController 注释(它本身就像 @Contoller + @ResponseBody 注释)。

那么在 Spring Framework 中 REST WS 和 web-applications 的实现有什么不同呢?

谁能帮我理解这个?

【问题讨论】:

  • 我不确定为什么这个问题被投票关闭。在问这个问题之前,我确实解释了我所做的功课。对于有经验的开发人员来说,这可能是一个幼稚的问题,但对于初学者来说可能是有道理的。如果希望对此问题进行其他编辑,我愿意这样做,但请帮助消除疑虑。最好的问候
  • 我会说这个问题太宽泛了。 Rest 是 jax-rs,webservices 是 jax-ws。
  • @Nicholas:感谢您的回复。我的问题是针对 RESTful WS 的 Spring 框架支持。如果使用 Spring 创建 RESTful WS,我会感到困惑,我们是否使用与创建基于 Spring MVC 的 Web 应用程序相同的 API?
  • 聊天 Java::chat >​​ 和芯片,如果你想的话。 Rest 只是暴露了一个“REST”端点,前端不是它的一部分。如您所述,MVC 将使用 @Controller 响应浏览器请求。一些客户端框架与 REST 端点接口以获取数据。 MVC 是一个服务器端框架。
  • @Nicholas:感谢您的回复。我阅读了更多文档,所以我相信这只是注释和发回的响应的区别,基础 Spring 支持是相同的(它使用 spring-web、spring-mvcweb 模块。

标签: spring web-services rest spring-mvc spring-rest


【解决方案1】:

是的,我们可以使用 Spring 编写 RestService 和 Web 应用程序。使用 @RestController 公开 REST 服务和 @Controller 用于 Web 应用程序。

@RestController 是带有@Controller 和@ResponseBody 的元注释。 @Controller 将搜索已注册的 ViewResolver,而 @RestController 不会。

【讨论】:

    【解决方案2】:
    @Controller
    public class SimpleController {
    @RequestMapping("/welcome", method = RequestMethod.GET, produces="application/json")
        public @ResponseBody JSONObject handleIncomingWelcomeReq() {
        JSONObject j = new JSONObject();
        j.put("welcomeKey", "WelcocmeKey's value!");
        return j;
    }
    

    这是在 json 中返回响应的代码,主要是用户 id Rest APIs。

    【讨论】:

      【解决方案3】:

      我建议使用@Controller 而不是@RestController,因为@RestController 不会扫描您的视图。因此,如果您的应用程序有自己的视图并且还需要公开其服务,您可以使用 @Controller 和 @ResponseBody 注释,并以 JSON 格式输出。

      另一种选择是为 RESTful Web 服务提供完全不同的 URL,其中不同的控制器将处理请求。这些不同的控制器可以用@RestController 注释。

      【讨论】:

        猜你喜欢
        • 2013-06-19
        • 1970-01-01
        • 2018-03-29
        • 2015-02-20
        • 1970-01-01
        • 2018-01-30
        • 2018-10-25
        • 1970-01-01
        • 2016-10-01
        相关资源
        最近更新 更多