Как заставить Spring's @ResponseBody использовать xmlConvertor - PullRequest
1 голос
/ 07 сентября 2011

Когда я возвращаю один объект из контроллера, как это,

@ResponseBody 
public MyClass module(...) {
...
}

Я получаю вывод xml на клиенте, и журнал показывает вот так:

2011-09-07 18: 22: 06,963 [qtp1409490836-27] ОТЛАДКА org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter - Записано [com.domain.MyClass@4374820d] как «application / xhtml + xml» с помощью [Org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@b4e1f3]

Но если я использую такой список,

@ResponseBody 
public List<MyClass> module(...) {
...
}

Он использует jsonConvertor и возвращает вывод json.

2011-09-07 18: 38: 31,026 [qtp420370595-26] ОТЛАДКА org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter - Написано [[com.domain.MyClass@654309f0]] как "application / json; charset = UTF-8" используя [Org.springframework.http.converter.json.MappingJacksonHttpMessageConverter@14419f80]

MyClass аннотируется с помощью jaxb. В майке я мог бы сказать

@Produces({ MediaType.APPLICATION_XML })

Как заставить пружину всегда использовать xmlconverter?

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

Существует некоторая ошибка, которая означает, что вы не можете вернуть свой класс в списке.Вам нужно создать новый класс для хранения вашего списка объектов и вернуть его в @ResponseBody.Примерно так:

@RequestMapping(value = Constants.URL, method = RequestMethod.GET)
public @ResponseBody ListHolder getFoos(HttpServletResponse response) {
    response.setContentType("application/xml");         
    List<Foo> foos = getFoos(); 
    ListHolder listHolder = new ListHolder();
    listHolder.setFoos(foos);
    return listHolder;
}

Аннотируйте свой класс ListHolder с помощью @XmlRootElement и, если у вас есть jaxb jar или Java 6, тогда он должен работать.

0 голосов
/ 07 сентября 2011

Если Spring не может найти преобразование JSON, он не может отправить JSON.Попробуйте удалить jackson.jar из пути к классам, и он должен по умолчанию использовать XML через XStream для всех запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...