我有这个Spring方法,它只是将资源映射到.jsp:
@ResourceMapping(value = "display")
public String displayResult() {
return "mypage"
}
如果我将方法更新为:
@ResourceMapping(value = "display")
public String displayResult(javax.portlet.ResourceResponse rr) {
rr.setContentType("text/html;charset=UTF-8");
return "mypage"
}
变量rr是初始化的,但是在后台发生了什么Spring“魔法”来初始化对象javax.portlet.ResourceResponse?
答案 0 :(得分:0)
这是Spring MVC框架的一部分。 Spring文档(Link for 3.2.x)的“定义@RequestMapping处理程序方法”一节中解释了默认规则
我的猜测是你的类路径上有一个帮助库,它扩展了注释@ResourceMapping
和类型ResourceResponse
答案 1 :(得分:0)
正如Aaron所指出的那样,在他提供的链接中解释了解析处理程序方法的参数的默认规则。
但是,使得处理程序方法接受其他类型的参数不是通过扩展@ResourceMapping批注来实现的,而是通过在Spring 3.1之前实现新的WebArgumentResolver和从3.1实现HandlerMethodArgumentResolver。见http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/web/method/support/HandlerMethodArgumentResolver.html
在你的情况下,javax.portlet.ResourceResponse可能是Spring web mvc portlet框架直接支持的,虽然我找不到这方面的文档。在IDE中,您可以查看实现HandlerMethodArgumentResolver(或WebArgumentResolver)的所有类