【问题标题】:Annotation to invoke REST service by Content-Type parameter通过 Content-Type 参数调用 REST 服务的注解
【发布时间】:2025-12-31 21:55:02
【问题描述】:

我曾尝试 google,但无法找到有关此主题的内容。 问题是:

我有

Content-Type: multipart/mixed; TYPE=<paramValue>; boundary=----WebKitFormBoundaryMfWZACtN4mYmJK06;

其中 paramValue 可以是 paramValue1ParamValue2

无论如何都可以按 TYPE 参数值推迟 REST 调用。比如:

@Consumes("multipart/mixed; TYPE=paramValue1")
@POST
postParameterValue1()

@Consumes("multipart/mixed; TYPE=param**Value2**")
@POST
postParameterValue2()

【问题讨论】:

    标签: java jersey jax-rs multipart


    【解决方案1】:

    您需要明确哪个 REST 库。我认识的人无法处理您的请求。例如,您如何预测边界参数?什么是“类型”?它真的是您的内容类型的一部分,还是只是控制服务器的工具? 我会说,不——restEASY 是不可能的。而且自己实现起来似乎相当困难。

    【讨论】:

      【解决方案2】:

      我不需要预测 bodypart。这只是一个例子。我们可以忘记它。关于 REST 实现。我正在使用 javax.ws.rs-api-2.1.jar。 TYPE 只是自定义参数,只能有几个值。我能够得到 content-type 标头参数的映射:

      Map<String, String> contentTypeParameters = multiPart.getMediaType().getParameters();
      

      并认为可能有一个注释可以让我避免以编程方式实现这一点。如果有人遇到这个问题并知道答案 - 我将不胜感激。

      【讨论】:

        【解决方案3】:

        你不能用注解来做到这一点。 我建议你写一个小逻辑来处理这种情况。

        首先,您应该创建一个 rest 方法来接收所有请求。此方法的输入参数应该是Content-Type 标头的值。然后你可以检查值并做任何你想做的事情:

        private static final String CASE_1 = "paramValue1" 
        
        @POST
        postParameterValue(@HeaderParam("Content-Type") final String contentType) {
            if (CASE_1.equals(contentType)) {
                handleCase1Request();
            } else {
                handleCase2Request();
            }
        
        }
        
        private void handleCase1Request() {
            // do anything what you like
        }
        
        private void handleCase2Request() {
            // do anything what you like
        }
        

        【讨论】: