2015-02-04 4 views
1

Я пытаюсь реализовать службу REST с использованием Spring 4.Создание JSON с помощью JAXB аннотации, Джексон и Spring

Приложение построено с использованием Java 7 и работает на Tomcat 7.

Метод REST вернется объект клиента в JSON. Приложение управляется аннотациями.

В классе Customer есть аннотации JAXB. Джексонские банки присутствуют в пути класса. Согласно моему пониманию, Джексон будет использовать аннотации JAXB для создания JSON.

Класс Заказчик:

@XmlRootElement(name = "customer") 
public class Customer { 
private int id; 
private String name; 
private List favBookList; 
@XmlAttribute 
public int getId() { 
return id; 
} 
public void setId(int id) { 
this.id = id; 
} 
@XmlElement 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 

@XmlElementWrapper(name = "booklist") 
@XmlElement(name="book") 
public List getFavBookList() { 
return favBookList; 
} 
public void setFavBookList(List favBookList) { 
this.favBookList = favBookList; 
} 
} 

Я аннотированный класс REST службы, как @RestController (согласно Спринг 4)

Метод REST для возврата объекта клиента в формате JSON:

@RequestMapping(value="/customer.json",produces="application/json") 
public Customer getCustomerInJSON(){ 
    Customer customerObj = new Customer(); 
    customerObj.setId(1); 
    customerObj.setName("Vijay"); 
    ArrayList<String> favBookList = new ArrayList<String>(); 
    favBookList.add("Book1"); 
    favBookList.add("Book2"); 
    customerObj.setFavBookList(favBookList); 
    return customerObj; 

} 

В результате я ожидал, когда я ударил URL:

{"id":1,"booklist":{"book":["Book1","Book2"]},"name":"Vijay"} 

Что я получаю:

{"id":1,"name":"Vijay","favBookList":["Book1","Book2"]} 

Кажется, Джексон игнорирует JAXB аннотациями @XmlElementWrapper (имя = "Booklist") и @ XmlElement (name = "book") выше метод getFavBookList() в классе клиентов

Am I mi что-то?

Нужно руководствоваться. Благодарю.

+0

поместить эти аннотации на объявлении переменной, и проверить – Vihar

+0

пробовал. по-прежнему получают тот же результат. –

ответ

1

По существу, дело в том, что вы указали xml-аннотации и ожидаете выход Json.

Вам необходимо найти Json-эквивалент для своей части счетчика xml @xmlElementWrapper.

Эта функция используется для работы в Джексоне 1.x, но не в Джексон 2.x

+0

Спасибо за эту заметку. Тем не менее, я использую Jackson 1.9. Необходимо проверить это. –

+0

Мне не удалось найти решение с Джексоном. Однако я столкнулся с обсуждением, в котором требуемый JSON может быть достигнут с помощью MOXy [ссылка] http://stackoverflow.com/questions/7735245/jaxb-jackson-handling-arrays?answertab=active#tab-top Во-вторых, я чувствую, что мой необходимый JSON не представляет собой естественный JSON. Результат, который я сейчас получаю, кажется, представляет собой естественный результат JSON. Я могу аннотировать список, используя ** @ JsonProperty ("bookList") ** Любые мысли? –

+0

Да, вы идете вправо, но оба Json действительны, в зависимости от того, что вам лучше всего использовать. – Vihar

Смежные вопросы