2013-09-29 2 views
3

У меня есть класс Controller, который становится исполняемым. Но я не получаю никакого ответа.@ResponseBody не производит json с вызовом Hibernate

Я использую <mvc:annotation-driven /> и имеет jackson-core-asl-1.9.13.jar и jackson-mapper-asl-1.9.13.jar в \WEB-INF\lib.

@RequestMapping(value = "/persons.htm", method = RequestMethod.GET, produces={"application/json"}) 
public @ResponseBody Collection<Person> getPersons() { 
    Collection<Person> persons = personService.findPersons("Smith"); // request comes here 
    System.out.println("persons " + persons); // This works fine 
    // If I discard the result and add dummy data it works fine. 
    return persons; 
} 

Я получаю 500 Internal Server Error в клиенте отдыха. Трассировка стека исключений в консоли не отображается.

+1

Ваш метод, кажется, отсутствует оператор возврата ?! – moxn

+0

Что значит «не получить ответ»? Получаете ли вы пустой ответ, ошибку или HTTP-вызов не возвращается вообще? – moxn

+0

Тогда там должна быть скрытая трассировка стека. Проверьте свои журналы и добавьте их в свой пост. – moxn

ответ

2

Ваша проблема может быть в значении @RequestMapping как запрос .htm. Из-за расширения Spring может установить тип носителя HTML, а не JSON. Следовательно, вы можете изменить отображение запроса на value = "/persons.json"

Во-вторых, ваш produces = {"application/json"} не должен иметь фигурные скобки {}. Это может быть: produces = "application/json"

Кроме того, ваша конфигурация Spring есть Jackson картографа, как следующее:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.FormHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> 
     </list> 
    </property> 
</bean> 
0

Поскольку Java 6 вы не должны помнить, что именно нужно настроить produces чтобы, просто помните, там это класс, который имеет все различные типы медиа предопределены, посмотреть, что класс вверх, найти средства массовой информации по вашему выбору и импортировать его статический:

import static javax.ws.rs.core.MediaType.APPLICATION_JSON; 

, так что вы можете написать аккуратный код, который просто более удобный для чтения:

@RequestMapping(... produces=APPLICATION_JSON ...) 

Это быстрая победа.

Вот соответствующая документация: http://docs.oracle.com/javaee/6/api/javax/ws/rs/core/MediaType.html

Смежные вопросы