【问题标题】:Adding another MediaType to REST api endpoint that is used by other clients将另一个 MediaType 添加到其他客户端使用的 REST api 端点
【发布时间】:2023-03-22 22:56:01
【问题描述】:

在我的应用程序中,我使用 Spring MVC 共享 REST api,用户可以在他们的自定义应用程序中使用这些 API。假设我在 Controller 类中有一个端点:

@GET
@Path("/getNumber")
@Produces({ MediaType.TEXT_PLAIN })
public String getNumber(Long id) {
    return service.getNumber(id);
}

哪个响应仅作为 TEXT_PLAIN 提供。例如,如果其中一位客户说当他以纯文本形式获得响应并且端点应该返回 json/或应该有可能以 json 形式返回响应时,他的应用程序将无法工作,会发生什么?因此,当我将另一个 MediaType 添加到注释 @Produces 时,是否会导致使用此端点的其他用户自定义应用程序出现问题?因为对于前。在他们的应用程序中,客户端可能期望以纯文本形式响应,并且通过以 json 形式获取响应,将无法正确处理响应? 如果添加此 MediaType 可能会导致问题,我该如何考虑使用此端点的用户自定义应用程序?我是否应该创建类似的端点,但是这个端点将具有 MediaType APPLICATION_JSON,或两者兼有,并为 ex 添加。端点路径中的“/v2”,还是有更好的解决方案?

@GET
@Path("/v2/getNumber")
@Produces({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON })
public String getNumber(Long id) {
    return service.getNumber(id);
}

【问题讨论】:

    标签: java spring rest spring-mvc


    【解决方案1】:

    无需创建多个端点。您可以在 @Produces 中定义多个 mediaType。

    为了决定应该发送哪个 MediaType 作为响应,客户端必须在发出请求时在“Accept”标头中设置他们期望的 MediaType 类型。

    根据这个“Accept”标头,您可以决定返回什么内容类型。

    【讨论】:

      【解决方案2】:

      您可以使用“consume”关键字来表示多种媒体类型

      @GET(value = "/configuration", 消耗 = { MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE }) public String setConfiguration(@RequestPart MultipartFile 文件,@RequestBody 配置配置)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-16
        • 1970-01-01
        • 2021-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多