Обход ViewResolver с использованием @ResponseBody & Method Converter для JSON и XML работает только для JSON - PullRequest
0 голосов
/ 24 января 2012

Я создаю RESTful API, который возвращает JSON или XML в зависимости от заголовка Accept (application / json vs text / xml).У меня это работает нормально для JSON, но не могу заставить его работать, когда для XML.Я тестирую с помощью плагина-клиента Poster для Firefox.

У меня сложилось впечатление, что мне просто нужно добавить библиотеки Jackson и JAXB в путь к классам приложения.Опять же, это работает для JSON, но не для XML.

Первоначально я получал ошибку 406 при отправке заголовка Accept "text / xml".Затем я добавил @XmlRootElement(name="contact") к своей сущности, и теперь я получаю ошибку 500.Нужно ли мне ставить @XmlRootElement на каждую сущность?

Несмотря на то, что ответом является ошибка 500, я не вижу сообщений об ошибках в консоли.Я тестирую в Eclipse под управлением Tomcat 7. Разве я не вижу какую-то ошибку в консоли, когда получаю ошибку 500?

Мой "mvc-dispatcher-servlet.xml" имеет <mvc:annotation-driven />

Вот соответствующий код из моего контроллера:

    @Controller
@RequestMapping("/contacts")
public class ContactsController {

    @Autowired
    ContactsService contactsService;

    @RequestMapping(value="/{id}",
                method=RequestMethod.GET,
                headers = {"Accept=application/json, text/xml"})
    public @ResponseBody Contact getContact(@PathVariable("id") int id) {
        Contact queryContact = new Contact(id);
        Contact result = contactsService.getContact(queryContact); 
        return result;
    }
}

"mvc-dispatcher-servlet.xml" действительно прост.Нужно ли мне что-нибудь кроме:

    <context:component-scan base-package="contactsapp.web.controller" />
<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/resources/"/>

Я использую Spring 3.1 и следующее:

    <dependency org="com.sun.xml.bind" name="jaxb-impl" rev="2.2.5-b10" conf="runtime->default"/>
<dependency org="org.codehaus.jackson" name="jackson-mapper-asl" rev="1.7.1" conf="runtime->default"/>

Ответы [ 2 ]

1 голос
/ 24 января 2012

Оказывается, я правильно настроил.Как только я включил более подробное ведение журнала, я понял, что у меня есть циклические зависимости в моих классах сущностей, и мне пришлось добавить @XmlTransient в эти поля

1 голос
/ 24 января 2012

Вы должны поместить

@ XmlRootElement в класс контактов, чтобы сообщить Джексону, как анализировать.

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