Весна 3: @ResponseBody - Как контролировать ответ, чтобы получить XML или JSON? - PullRequest
2 голосов
/ 20 июня 2011

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

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

EDIT

Используемые зависимости 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

Ответы [ 3 ]

4 голосов
/ 20 июня 2011

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

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

0 голосов
/ 08 июля 2014

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

@RequestMapping(
 value = "...", 
 method = {RequestMethod.POST},produces ="application/json")
 public @ResponseBody Object getObject() { ... } 
0 голосов
/ 05 марта 2013

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

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