我有Controller
类可以执行。但我没有得到任何回应。
我正在使用<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
。控制台中不会出现异常堆栈跟踪。
答案 0 :(得分: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>
答案 1 :(得分: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