HTTP 状态 415 - 执行 POST 时不支持的媒体类型
HTTP Status 415 - Unsupported Media Type when doing POST
所以我试图在 Chrome 中使用 REST 和 Postman
做一个 POST
,但是在我点击发送后出现错误
HTTP Status 415 - Unsupported Media Type
包括我的代码和部分屏幕截图,我尝试的 hashmap
对是 duration
和 150
。我确信 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);
}
所以我试图在 Chrome 中使用 REST 和 Postman
做一个 POST
,但是在我点击发送后出现错误
HTTP Status 415 - Unsupported Media Type
包括我的代码和部分屏幕截图,我尝试的 hashmap
对是 duration
和 150
。我确信 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);
}