2011-06-20 1 views
2

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

+1

Вы должны указать, что в запросе –

+0

Как сделать это? – marioosh

+0

Взгляните на образцы mvc-ajax из Spring SVN https://src.springframework.org/svn/spring-samples/mvc-ajax/trunk/ – Random

ответ

4

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

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

+1

У меня такая же проблема, но заголовок Accept не работает ... –

0

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

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

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

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