【问题标题】:Rest Client implementation for spring 3 applicationSpring 3 应用程序的 Rest Client 实现
【发布时间】:2012-06-07 10:30:28
【问题描述】:

我需要为我的 spring 3 web 应用程序之一编写 java API。我应该能够通过这些 API 执行我使用 web UI 执行的所有操作。我有用@RequestMapping 装饰的控制器方法.我最近听说,这些方法可以公开为 Restful 服务,只需极少修改即可通过 REST 客户端访问。我只是想知道为 spring3 服务创建 Rest 客户端的推荐方法。我不想在这些 java API 中使用任何 spring 依赖项。我应该能够使用这些 API 上传文件,因为我在我的 spring 应用程序中实现了 multipart/form-data。有人可以帮我选择在 java 中为 Spring 应用程序开发 RestClients 的最佳方法吗?

我有以下 HTTP 实现:

Java - 使用 JVM 提供的 HTTP 实现。与 HttpClient 实现相比,这有一些限制。

HTTPClient3.1 - 使用 Apache Commons HttpClient 3.1。

HTTPClient4 - 使用 Apache HttpComponents HttpClient 4.x。

请告诉我你的建议。

【问题讨论】:

    标签: spring rest http-headers httpclient rest-client


    【解决方案1】:

    就我个人而言,我使用 org.springframework.web.client.RestClient,因为您已经在使用 Spring。他们在管理你需要的东西方面做得很好,只要记住他们的例外,没有内容处理很糟糕。我必须做的唯一修改是覆盖他们的doExecute(URI, HttpMethod, RequestCallback, ResponseExtractor<T>) 并添加:

    if (response.getStatusCode().equals(HttpStatus.NO_CONTENT)) {
        return null;
    }
    

    之前

    if (!getErrorHandler().hasError(response)) { ...
    

    除了那个小怪癖(和一些自定义异常处理)之外,它还是一个很棒的工具。

    【讨论】:

    • 非常感谢您提供的详细信息。我想知道 RestTemplate 是否支持多部分文件上传。我需要与 HTTPRequest 一起发送文件
    • 你也可以看这里:stackoverflow.com/questions/4118670/…
    • 我还有一个问题:我需要在休息时执行一项操作。哪个 HTTP 动词适合执行操作?根据 REST 规范:要在服务器上创建资源,请使用 POST。要检索资源,请使用 GET。要更改资源的状态或更新它,请使用 PUT。要移除或删除资源,请使用 DELETE。
    • 但我需要执行特定于应用程序的操作。我只是想知道应用程序特定的操作是否违反 REST 原则。换句话说,如果我需要执行特定操作,比如处理上传的文件并将其转换为不同的格式并发送到远程位置,我应该使用 REST 吗?我可能不是在正确的 REST 上下文中谈论。我需要做的就是“我应该为我的服务器创建 java API,用户应该能够像通过 WEBUI 一样执行操作”
    猜你喜欢
    • 2013-10-23
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2012-04-13
    • 2014-05-02
    • 2019-05-10
    • 1970-01-01
    • 2017-06-20
    相关资源
    最近更新 更多