Весна 3: @ResponseBody — как контролировать ответ, чтобы получить XML или JSON?

Я использую конфигурацию <mvc:annotation-driven /> Spring (3.0) (без ContentNegotiatingViewResolver). Согласно документация Spring 3 поддерживает JSON и XML. Использование @ResponseBody в методе обработчика, как показано ниже, дает ответ JSON. Как контролировать ответ, чтобы получить XML или JSON?

@RequestMapping("/data")
public @ResponseBody User getUser() {
    return new User();
}

ИЗМЕНИТЬ

Используемые зависимости Maven:

<!-- xml -->
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.1.8</version>
</dependency>

<!-- json --> 
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.8.1</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.8.1</version>
</dependency>

Отладка AnnotationDrivenBeanDefinitionParser => jaxb2Present = true, jacksonPresent = true


person marioosh    schedule 20.06.2011    source источник
comment
Вы должны были указать это в запросе   -  person Satadru Biswas    schedule 20.06.2011
comment
Взгляните на образцы mvc-ajax из Spring SVN src.springframework. org/svn/spring-samples/mvc-ajax/trunk   -  person Random    schedule 20.06.2011
comment
@Random Я не нашел ничего полезного :(   -  person marioosh    schedule 20.06.2011
comment
blog.springsource.com/2010/01 /25/ ?   -  person Random    schedule 20.06.2011
comment
@Random Спасибо за ссылку. Я несколько раз натыкался на эту статью, но, к сожалению, не дает ответа на свой вопрос, она относится к Ajax/JSON - это работает для меня. Мне нужна помощь, чтобы получить ответ XML. Мне нужно только (или, возможно, слишком много), чтобы http://server/.../json возвращал JSON и http://server/.../data возвращал XML, используя аннотации Spring 3.   -  person marioosh    schedule 20.06.2011
comment
@marioosh - Кстати, ты поляк? :) Попробуйте поискать примеры реализации RESTFull, возможно, вы найдете способы рендеринга в разные форматы. blog.springsource.com/2009/03/08 /остальное-в-весне-3-мвк   -  person Random    schedule 20.06.2011


Ответы (3)


Spring использует заголовок «Accept» запроса, чтобы решить, следует ли отправлять JSON или XML. Если оба будут приняты, то вы получите либо одно, либо другое, я не помню, проверяется ли оно первым.

Чтобы получить XML, ваш клиент должен иметь в заголовке «application/xml», а не «application/json».

person skaffman    schedule 20.06.2011

Используйте @ResponseBody вот так. Метод ниже принимает JSON в качестве параметра запроса и возвращает ответ JSON.

@RequestMapping(value = "...", method = RequestMethod.POST)
@ResponseBody
public Object RestPOSTService(@RequestBody JsonContent content,
        HttpServletRequest request) throws Exception {
        .....
    return (JSON);
}
person Muhammad Imran Tariq    schedule 05.03.2013

Он настроен в RequestMapping

@RequestMapping(
 value = "...", 
 method = {RequestMethod.POST},produces ="application/json")
 public @ResponseBody Object getObject() { ... } 
person Gorky    schedule 08.07.2014