Содержание XML преобразования передается с POST на объект Java, атрибут внутри элемента: REST -- java поле с участием rest поле с участием jersey поле с участием xmlmapper пол Связанный проблема

REST: convert XML content passed with POST to a java object, attribute inside the element


1
vote

проблема

русский
<Р> Я работаю с REST сервисов и я хочу передать XML-текст запроса POST. Мой сервер реализован в JAVA. Давайте предположим, что я посылаю этот XML:
 <код> <range>   <higher value="3"></higher>   <lower value="2"></lower> </range>   

<Р> Как я понимаю (поправьте меня, если я ошибаюсь), самый простой способ для преобразования XML в запросе на объект Java, чтобы определить класс с соответствующими аннотациями. Например:
 <код> @XmlRootElement(name = "range") public class RangeClass {      @XmlElement (name = "lower")     private int lower;      @XmlElement (name = "higher")     private int higher;      .     .     ??? }   

<Р> А потом читать его следующим образом:
 <код> @POST @PATH(<somePath>) @Consumes(MediaType.APPLICATION_XML) @Produces(MediaType.TEXT_PLAIN) public String myFun(RangeClass range) {   .   .   . }   

<Р> Дело в том, что я не хватает (если другие части правильно), как определить, что у меня есть атрибуты внутри элементов. Если я Погружает «@XmlAttribute» аннотаций это будет ссылаться на атрибут корневого элемента ( «Range») и не является атрибутом определенного элемента ( «понизить» или «выше»).
Английский оригинал

I am working with REST services and i want to pass an XML-text with a POST request. My server is implemented in JAVA. Let's say that i am sending this XML:

<range>   <higher value="3"></higher>   <lower value="2"></lower> </range> 

As i understand (correct me if i am wrong), the easiest way to convert the XML in the request to a java object, is to define a class with the proper annotations. For example:

@XmlRootElement(name = "range") public class RangeClass {      @XmlElement (name = "lower")     private int lower;      @XmlElement (name = "higher")     private int higher;      .     .     ??? } 

And then read it like this:

@POST @PATH(<somePath>) @Consumes(MediaType.APPLICATION_XML) @Produces(MediaType.TEXT_PLAIN) public String myFun(RangeClass range) {   .   .   . } 

The thing that i am missing (if the other parts are correct) is how to define that i have attributes inside the elements. If i put an '@XmlAttribute' annotation this will refer to an attribute of the root element ('range') and not an attribute of a specific element ('lower' or 'higher').

</div
           

Список ответов

3
 
vote
vote
Лучший ответ
 

Первый И самый простой способ - создать отображение Java на каждый тег XML:

 <код> @XmlRootElement(name = "range") public class RangeClass {      private Higher higher;      private Lower lower; }  @XmlElement(name = "higher") public class Higher {      @XmlAttribute     private int value; }  @XmlElement(name = "lower") public class Lower {      @XmlAttribute     private int value; }   

Второй опция - это изменить структуру XML для:

 <код>                 PrincipalContext ctx = new PrincipalContext(ContextType.Domain);                 GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "GroupName");                 string sid = group.Sid.ToString(); 0  

Тогда вы можете использовать @xmlelement аннотация:

 <код>                 PrincipalContext ctx = new PrincipalContext(ContextType.Domain);                 GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "GroupName");                 string sid = group.Sid.ToString(); 1  

Третья опция - это использовать для использования Eclipse Link Moxy и его @XmlPath аннотаций:

 <код>                 PrincipalContext ctx = new PrincipalContext(ContextType.Domain);                 GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "GroupName");                 string sid = group.Sid.ToString(); 2  
 

First and the easiest way is to create a Java mapping per each XML tag:

@XmlRootElement(name = "range") public class RangeClass {      private Higher higher;      private Lower lower; }  @XmlElement(name = "higher") public class Higher {      @XmlAttribute     private int value; }  @XmlElement(name = "lower") public class Lower {      @XmlAttribute     private int value; } 

Second option is to change XML structure to:

<range>   <higher>3</higher>   <lower>2</lower> </range> 

Then you can use @XmlElement annotation:

@XmlRootElement(name = "range") @XmlAccessorType(XmlAccessType.FIELD)  public class RangeClass {      @XmlElement     private int lower;      @XmlElement     private int higher;  } 

Third option is to use Eclipse Link Moxy and its @XmlPath annotation:

@XmlRootElement(name = "range") @XmlAccessorType(XmlAccessType.FIELD)  public class RangeClass {      @XmlPath("lower/@value")     private int lower;      @XmlPath("higher/@value")     private int higher;  } 
</div
 
 
     
     

Связанный проблема

2  Мой бар jmenu не показывает  ( My jmenu bar is not showing up ) 
Мой jmenubar не показывает, когда я запускаю свое приложение. Как я могу это исправить ?? Поэтому, когда я бегу свой Jframe, мне нужно увидеть мой jmenubar ...

1  Libgdx setscreen () сбивает игру, когда сделано несколько раз  ( Libgdx setscreen crashes game when done multiple times ) 
У меня есть <код> GameScreen и после окончания уровня, я устанавливаю экран обратно в <код> GameScreen как перезапустить , когда пользовательская кнопка пе...

0  Передаваемые данные из другого потока, медленно последовательная связь с библиотекой Java и RxTx  ( Transmitting data from another thread slow serial link with java and rxtx libra ) 
<Р> Хорошо, я постараюсь быть как можно более ясно с моей проблемой. Я передача последовательных данных по veeeeeeery медленного радиоканала (с помощью UART-ко...

16  Enum внутри jsp [дубликат]  ( Enum inside a jsp ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

2  Изменить формат дата в DTO JSON на возвращении через @Responsebode  ( Change date format in dto json on returning through responsebody ) 
Я просто хочу изменить формат даты в моем DTO, возвращенный @Responseboodbody Мой вопрос не Этот вопрос как мой выход Список JSON и я печатаю его по почте...

4  403 доступ запрещен на указанный URL в Tomcat 7.0.52  ( 403 access denied to specified url in tomcat 7 0 52 ) 
Я недавно мигрировал сервер Tomcat из <код> 7.0.49 на <код> 7.0.52 . В Tomcat он содержит 2 веб-приложений, которые работали ранее, после миграции на эту вер...

0  Прокрутите вверх относительной макета при прокрутке вверх по просмотру  ( Scroll up relative layout when scrolling up listview ) 
Я создаю приложение. и пользовательская информация отображается в относительной макете. При относительной макете - это список с элементами, создаваемыми польз...

40  Можете ли вы сказать во время выполнения, если вы запускаете Java из банки?  ( Can you tell on runtime if youre running java from within a jar ) 
У меня есть приложение, которое некоторые из моих пользователей работают от Eclipse, и другие запускают его, используя файл JAR. Я хочу, чтобы некоторые дей...

1  Неправильное количество прошедших args, но я передаю правильную сумму  ( Wrong number of args passed but i pass the correct amount ) 
Я использую quil с cljure и получаю странную ошибку. Я получаю ошибку <код> Exception in :draw function: #error { :cause Wrong number of args (1) pass...

-1  Как добавить JTable для JPanel  ( How to add a jtable to a jpanel ) 
Мой вопрос может показаться немного глупо, но каждый раз, когда я использую качели, у меня проблемы с таблицами. Таким образом, я работаю над школьным проекто...

0  Случайные 7-значные номера на andich android  ( Random 7 digit numbers on click android ) 
Я хотел бы, чтобы вы помогли мне в этом коде. Я могу генерировать случайные числа, но не в точном количестве. Вопрос: Как я могу генерировать 7 случайных ци...

-3  Как прекратить воспроизведение сервиса в Android  ( How to stop playing service in android ) 
У меня есть вопрос о сервисе и трансляции в Android.I Создайте страницу будильника, которые используя класс тревоги Reciver (он расширяет класс трансляции) дл...

3  Итализация через хесмап: «Для» петля с использованием произвольного доступа или итератора?  ( Iterating over a hashmap for loop using random access or iterator ) 
Мне нужно повторить через хешмап, чтобы извлекать значения, хранящиеся в нем. Как бонус, у меня также есть список клавиш. Поэтому у меня есть возможность по...

16  Обычная задача Android (эквивалент Cronjob)  ( Android regular task cronjob equivalent ) 
Последний раз, когда этот вопрос был задан (другим пользователем), ответ ответа был: Если это работает в беговой активности, вы можете использовать таймер ...

0  Прямоугольник и круг Collision Java, используя .Наиград  ( Rectangle and circle collision java using intersection ) 
Я делаю игру на прорыв для школьного проекта. Единственная проблема, которую я бегу в, это мяч, подпрыгивая, когда мяч и кирпичи сталкиваются. Я использовал B...

Связанный проблема

2  Мой бар jmenu не показывает 
1  Libgdx setscreen () сбивает игру, когда сделано несколько раз 
0  Передаваемые данные из другого потока, медленно последовательная связь с библиотекой Java и RxTx 
16  Enum внутри jsp [дубликат] 
2  Изменить формат дата в DTO JSON на возвращении через @Responsebode 
4  403 доступ запрещен на указанный URL в Tomcat 7.0.52 
0  Прокрутите вверх относительной макета при прокрутке вверх по просмотру 
40  Можете ли вы сказать во время выполнения, если вы запускаете Java из банки? 
1  Неправильное количество прошедших args, но я передаю правильную сумму 
-1  Как добавить JTable для JPanel 
0  Случайные 7-значные номера на andich android 
-3  Как прекратить воспроизведение сервиса в Android 
3  Итализация через хесмап: «Для» петля с использованием произвольного доступа или итератора? 
16  Обычная задача Android (эквивалент Cronjob) 
0  Прямоугольник и круг Collision Java, используя .Наиград