通过Content-Type参数调用REST服务的注释

时间:2017-11-06 12:44:20

标签: java jersey jax-rs multipart

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

我有

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

其中 paramValue 可以是 paramValue1 ParamValue2

无论如何都要按TYPE参数值推迟REST调用。类似的东西:

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

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

3 个答案:

答案 0 :(得分:0)

您需要明确哪个REST库。我知道的人无法处理您的请求。例如,你怎么能预测边界参数?什么是“TYPE”?它真的是您的内容类型的一部分,还是只是控制您的服务器的工具? 我会说,不 - 用restEASY是不可能的。而且你自己似乎很难实现。

答案 1 :(得分:0)

我不需要预测 bodypart 。这只是一个例子。我们可以忘记它。关于REST实现。我使用的是javax.ws.rs-api-2.1.jar。 TYPE 只是自定义参数,只能有多个值。我能够获得内容类型标题参数的地图:

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

并且认为可能有一个注释让我避免在程序化的过程中实现这一点。如果有人遇到这个问题并且知道答案 - 我将不胜感激。

答案 2 :(得分:0)

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

首先,您应该创建一个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
}