HTTP 状态 415 - 执行 POST 时不支持的媒体类型

HTTP Status 415 - Unsupported Media Type when doing POST

所以我试图在 Chrome 中使用 REST 和 Postman 做一个 POST,但是在我点击发送后出现错误

HTTP Status 415 - Unsupported Media Type

包括我的代码和部分屏幕截图,我尝试的 hashmap 对是 duration150。我确信 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;
    }
}

是的,正如我所怀疑的那样,FormMultivaluedMapProvider(处理 MultivaluedMap 读取 application/x-www-form-urlencoded Content-Type 只允许 MultivaluedMap<String, String>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);
}