Каков наилучший способ получить объект json из веб-контроллера? - PullRequest
1 голос
/ 12 ноября 2010

Я делаю веб-сайт, используя Spring MVC Framework. Я хочу сделать вызов ajax и получить объект json напрямую от моего веб-контроллера. Каков наилучший способ / способ / плагин для этого? Я видел уроки от Кейт Дональд , но, как мне кажется, немного сложнее. спасибо за любой совет.

Я поместил в свой файл pom jaxson json mapper. мой контроллер выглядит так:

    @RequestMapping(value = "m015", method = RequestMethod.GET)
public @ResponseBody String list(@RequestParam(value = "type", required = true) String type){
    List<Mail> mails = mailService.getUserMails((Long) WebHelper.getPrincipal().getUser().getId(),type);
    logger.info("yeah");
    return mails.toString();
}   

но я получаю это мой JavaScript: [com.stunaz.domain.Mail@94e0a6a2]

мой вызов ajax выглядит так:

var xhrArgs = {
url: "${ctx}/portal/mail/m015.do",
content: { type: id }, 
headers: {'Content-Type':'application/json'},
handleAs: 'text',
sync: true,
load: function(data) {
    alert(data);
},

}; dojo.xhrGet (xhrArgs);

Что я пропустил, пожалуйста?

Ответы [ 3 ]

1 голос
/ 12 ноября 2010

Весной 3.0 это так же просто, как:

@RequestMapping("/ajax/foo")
@ResponseBody
public Foo foo(){
    return new Foo();
}

Убедитесь, что в вашем приложении есть библиотека Джексона json, и Spring автоматически сериализует результат как json.

0 голосов
/ 20 ноября 2010
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="order" value="0" />
    <property name="interceptors">
        <list>
            <ref bean="localeChangeInterceptor" />
        </list>
    </property>
</bean>

<!-- Enables annotated POJO @Controllers -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
    <property name="messageConverters">
        <list>
            <ref bean="jsonConverter" />
        </list>
    </property> 
</bean>

0 голосов
/ 12 ноября 2010

Способ, описанный в блоге, на самом деле очень прост и элегантен.И вы можете повторно использовать метод контроллера, чтобы получить ответ в JSON, XML и т. Д. *

Что вы делаете, вы просто аннотируете метод с помощью @ResponseBody и включаете JSON-jar в свой проект.Я сам использую maven и делаю это, добавляя эту зависимость:

<!-- Jackson JSON Mapper -->
<dependency>
 <groupId>org.codehaus.jackson</groupId>
 <artifactId>jackson-mapper-asl</artifactId>
 <version>1.5.4</version>
</dependency>

В этом и заключается прелесть того, что метод контроллера может возвращать POJO (предпочтительно DTO), а преобразователь отображает это в JSON, какпока запрос к серверу имеет правильные заголовки с accept-encoding: application / json (или что бы то ни было).Он даже переводит входящие запросы с правильным типом содержимого в тип dto в сигнатуре метода.Beautiful!

Пример метода:

@RequestMapping(value ="/service/status", method = RequestMethod.GET)
public @ResponseBody Status getServiceStatus() {

    return new Status("Online", 60, "Nothing to report");
}

Используя этот подход, вы можете повторно использовать ваши методы (я использую это для API REST) ​​для JSON, веб-служб и т. Д. *

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