【问题标题】:HTTP Status 415 - Unsupported Media Type when doing POSTHTTP 状态 415 - 执行 POST 时不支持的媒体类型
【发布时间】:2015-07-24 03:18:59
【问题描述】:

所以我试图在 Chrome 中使用 REST 和 Postman 来执行 POST,但在我点击发送后出现错误

HTTP 状态 415 - 不支持的媒体类型

包括我的代码和部分屏幕截图,我试过的hashmapduration150。我确定 URL 是正确的,但不知道为什么不接受媒体类型。

@Path("activities")
public class ActivityResource {

    @POST
    @Path("activity")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
    public Activity createActivityParams(MultivaluedHashMap<String,String> formParams){
        return null;
    }
}

【问题讨论】:

  • 我知道你的名字是HashMap,所以你可能喜欢HashMaps,但是你试过MultivaluedMap吗?我还没有测试过,但读者可能只接受超类型而不是它的 isAcceptable 方法中的子类型。这只是一个猜测。现在不要打开我的工具箱 :-)

标签: spring rest jakarta-ee jersey jax-rs


【解决方案1】:

是的,正如我所怀疑的那样,FormMultivaluedMapProvider(处理MultivaluedMap 读取application/x-www-form-urlencoded Content-Type 只允许MultivaluedMap&lt;String, String&gt;MultivaluedMap,而不是MultivaluedHashMap,就像你一样。

这里是 isReadable 的源代码(当运行时查找 MessageBodyReader 来处理 Java/Content-Type 类型的组合时调用它。

@Override
public boolean isReadable(Class<?> type, Type genericType, 
                          Annotation[] annotations, MediaType mediaType) {
    // Only allow types MultivaluedMap<String, String> and MultivaluedMap.
    return type == MultivaluedMap.class
            && (type == genericType || mapType.equals(genericType));
}

作为旁注,在写作方面,这是一个不同的故事,你可以看到isWriteable方法,使用isAssignableFrom,如果isReadable有,你将能够使用MultivaluedHashMap作为您的方法参数。

@Override
public boolean isWriteable(Class<?> type, Type genericType, 
                           Annotation[] annotations, MediaType mediaType) {
    return MultivaluedMap.class.isAssignableFrom(type);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2017-07-05
    • 2015-08-29
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    相关资源
    最近更新 更多