Внедрение аннотаций REST вместе с внедрением пользовательских объектов XML в одном запросе

1

1) Я имею дело с аналогичной ситуацией, например: Как передать сложные объекты в качестве аргументов службе RESTful? , но на самом деле это инъекция моих пользовательских объектов XML, если они были введены правильно, ЕСЛИ я не комментирую параметр метода с помощью @Form.

Это объект запроса оболочки для инъекции:

@XmlRootElement(name = "request")
@XmlAccessorType(XmlAccessType.NONE)
@XmlType
@Consumes({"application/xml", "application/json"})
public class TestRequest {
    @PathParam(value = "value")
    private String value;  // this is injected only when @Form param is added to the method parameter definition

    @XmlElement(type = Test.class)
    private Test test; // this is XML object I want to inject from the REST request

    @XmlElement
    private String text; // or inject other XML element like this
}

Таким образом, это добавит мне параметры REST (например, {value} - @PathParam ("значение"), аннотированное в TestRequest). НО это не отменяет проверку объекта XML в объекте-оболочке TestRequested.

@POST
@Path("tests/{value}")
@Consumes("application/xml")
@Produces("application/xml")    
public void addTest(**@Form** TestRequest req);

И после определения будет вводить только объект XML Test, но не вводит аннотации REST (например, {value} из URI):

public void addTest(TestRequest req);  // without @Form annotation now

2) Я также попробовал другой подход, поймав запрос на пользовательскую реализацию MessageBodyReader, но был потерян в деталях, где можно найти код, метод или класс JAX-RS или RESTEasy, который на самом деле выполняет этот синтаксический анализ/инъекцию аннотаций REST (@PathParam, @QueryParam,...).

Я также заметил, что когда в определении метода есть @Form-аннотация, тогда пользовательский MessageBodyReader даже не зацепился (возможно, встроенный в один из параметров REST, этот запрос и пользовательский читатель игнорируются).

Я мог бы в этом настраиваемом программном обеспечении для чтения сообщений как-то позвонить этому встроенному поставщику инъекций, но я не нашел подходящую документацию, и, похоже, я делаю что-то неправильно, и все можно сделать более простым и другим способом.


Подводя итог цели: введите оба параметра REST (@PathParam, @QueryParam и т.д.) И пользовательские объекты XML/JSON каким-то образом в одном запросе в объекте ОДНОЙ оболочки. (Он работает с одним объектом-оберткой, аннотированным @Form, а другой параметр должен быть без аннотации @Form, но я хотел бы иметь все в одном объекте-оболочке).

Спасибо за понимание или помощь.

Теги:
dependency-injection
rest
unmarshalling

1 ответ

0

Вы смешиваете аннотации JAX-RS и JAXB. Это плохая идея. Используйте аннотации JAX-RS для классов ресурсов и аннотаций JAXB для классов репрезентации.

  • 0
    Таким образом, нет никакого способа иметь только один параметр в методе WS, так что все, что касается запроса, может быть введено в какой-то пользовательский класс?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню