[英]How should I create Groovy controller in Spring MVC
我已经看到了这个问题,我无法在我的Spring MVC项目中使用Groovy。 我应该保留在哪里,完整路径应该是什么? 请原谅我一个基本的问题,但是我必须在Spring MVC中开始使用Groovy。 Groovy在Spring 4.0 Snapshot中可用,根据官方网站,最终版本应该在12月发布。 但是现在,建议使用4.0版吗? (它具有对Groovy的内置支持)
参考代码:
<beans .........
...
...
<bean class="full.qualified.name.of.ProxyAwareAnnotationMethodHandlerAdapter" />
...
...
<lang:groovy script-source="classpath:com/example/mysample.groovy refresh-check-delay="1000" />
</beans>
Java类如下:
//ProxyAwareAnnotationMethodHandlerAdapter.java
package name.assafberg.spring;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.aop.TargetSource;
import org.springframework.aop.framework.Advised;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
/**
* Add proxy awareness to <code>AnnotationMethodHandlerAdapter</code>.
*
* @author assaf
*/
public class ProxyAwareAnnotationMethodHandlerAdapter extends AnnotationMethodHandlerAdapter {
/**
* @param request
* @param response
* @param handler
* @return
* @throws Exception
* @see org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter#handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object)
*/
@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
handler = unwrapHandler(handler);
return super.handle(request, response, handler);
}
/**
* @param handler
* @return
* @see org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter#supports(java.lang.Object)
*/
@Override
public boolean supports(Object handler) {
handler = unwrapHandler(handler);
return super.supports(handler);
}
/**
* Attempt to unwrap the given handler in case it is an AOP proxy
*
* @param handler
* @return Object
*/
private Object unwrapHandler(Object handler) {
if (handler instanceof Advised) {
try {
TargetSource targetSource = ((Advised) handler).getTargetSource();
return targetSource.getTarget();
} catch (Exception x) {
throw new RuntimeException(x);
}
} else {
return handler;
}
}
}
编辑
无需处理上述文件。 我唯一要注意的是Groovy版本。 确保从命令行确保Groovy的版本与“类路径”添加的版本相同。 而且有效。 几乎不需要任何配置。 刚刚创建了一个.groovy类而不是Java类(感谢+ kunal的启发。)
@Controller
class TestController {
@Autowired
@RequestMapping(value = "/welcome", method = RequestMethod.GET)
String People() {
return "people"
}
}
然后我在想出一种创建Groovy控制器的方法时就问了这个问题 。
Groovy控制器在一个实际的应用程序中为我出色地工作,该应用程序现已投入生产一年以上。 为了帮助人们在Spring MVC项目中看到groovy的价值,我分叉了Heroku的示例Java应用程序,并重写了groovy中的控制器。 请在此处签出项目:
https://github.com/kdabir/groovy-springmvc-sample
同样,查看历史记录以了解在现有的Java项目中如何引入groovy也会很有趣。 尽管从那时起我还没有涉及那个项目,但是它应该为您提供一个入门的思路。
编辑:
澄清一下,您只需将.java
文件转换为.groovy
,它就可以工作(只要它是有效的groovy语法)。
在重新加载groovy时,直接使用groovy编写spring-mvc
控制器应该会导致一些cglib
错误。 因此,您可以尝试使用使用jdk
代理控制器接口的解决方案,该接口与spring注释一起单独使用,例如@RequestMapping
@RestController
@ResponseBody
。
这个jdk
代理可以链接一个Groovy对象来执行。 您可以创建弹簧扫描以扫描代理接口,您可以从micro-mvc lib中查看示例。
https://github.com/jeffreyning/micro-mvc https://github.com/jeffreyning/nh-micro
扫描显示在GroovyScanner
,代理显示在InjectGroovyProxy
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.