3

我有Controller被执行的课程。但我没有得到任何回应。

我正在使用<mvc:annotation-driven />并拥有jackson-core-asl-1.9.13.jarjackson-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休息客户端。控制台中没有出现异常堆栈跟踪。

4

2 回答 2

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>
于 2013-09-29T09:19:05.097 回答
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

于 2016-04-01T13:20:30.873 回答