Получение 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.

Другие вопросы по тегам