Получение http 415, неподдерживаемый тип медиа с использованием text/xml
У меня есть конечная точка jersey (JAX-RS), которую я пытаюсь использовать с требованием text/xml. Я получаю обратно http 415, и я не понимаю, почему. Вот информация. Есть идеи? Благодарю.
@Path("/bid")
@Produces("text/xml;charset=ISO-8859-1")
@Consumes({"text/xml", "application/xml"})
@Resource
public class BidController {
@RolesAllowed("blah")
@POST
public Response bid(final HttpServletRequest request) {
Я нажимаю на него через Почтальона (клиент REST) и отправляю {"Content-Type":"text/xml"}
Мое тело POST определенно хорошо сформировано xml.
1 ответ
Вы получаете ответ 415, потому что JAX-RS не знает, как преобразовать входящий XML в HttpServletRequest
,
Если вы действительно хотите получить доступ к запросу, вам нужно аннотировать его с помощью @ javax.ws.rs.core.Context:
@RolesAllowed("blah")
@POST
public Response bid(@Context final HttpServletRequest request) {
Однако, как вы говорите, вы бьете text/xml
тогда вы можете захотеть:
@POST
public Response bid(final MyRequest request) {
...
}
где MyRequest
объявлено что-то вроде:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class MyRequest {
@XmlElement
int field1;
@XmlElement
String field2;
...
}
который соответствует XML, как:
<MyRequest>
<field1>11327</field1>
<field2>some string
</MyRequest>
Спецификация JAX-RS требует, чтобы реализации могли декодировать входящий текст /xml и кодировать исходящий текст /xml через JAXB.