struts2-rest-plugin 的bug?如果是的话,这个插件的问题可真够多的!

2024-03-28 00:18

本文主要是介绍struts2-rest-plugin 的bug?如果是的话,这个插件的问题可真够多的!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用注释方式给rest controller 加上拦截器:
@InterceptorRefs({@InterceptorRef("authorization"),@InterceptorRef("defaultStack")})

发现加上拦截器后,立马蹦出来一堆怪问题!

该执行的不执行了:
/userinfos/3.xml
在执行show()之前,
本来该执行
setId(String id) 方法,但不执行。
本来不应该执行validate()方法,但竟然执行了!

不加拦截器的时候好好的!
晕死了。。。
如果真是struts2-rest-plugin 的bug,可真够过分的!

——本来怀疑是不是拦截器中 invocation.invoke()执行回调时,RestActionInvocation被替换成了DefaultActionInvocation,导致丢掉了rest的特性,但result仍然返回了xml,理应不是。可如果不是这个原因,又是什么原因呢?


==================================================
2010.2.24 这个问题解决了!
==================================================
今天上午忽然发现弄了半天是引用的拦截器栈的名字写错了!
但这个问题背后,其实是我对问题的本质没有理解。刚开始就想到会不会是 actionInvocation 由 restActionInvocation 被替换成了
DefaultActionInvocation所致。但却没往拦截器方面去想。
仔细看了一下 struts2-rest-plugin jar包里的 struts-plugin.xml,里面有个 "restDefaultStack",我继承人家的"rest-default"package,在引用人家的默认拦截器栈时,当然不应该引用传统的"defaultStack",而应该引用rest包的"restDefaultStack",这样id参数自然不会丢失了,validate方法的执行也不会有问题了——show/index都不会执行,update/create 都默认执行。

但是还有个问题。。。


==================================================
2010.2.24 新问题!
==================================================

我想给 controller 中的方法添加拦截器,并且希望拦截器能加在 method 级别上。
看了 convension plugin 的官方文档:
http://struts.apache.org/2.x/docs/convention-plugin.html#ConventionPlugin-Applying@Actionand@Actionsattheclasslevel
所幸文档写的很明确,是支持的!
但是按照文档的样子,照搬到 rest 方式的 controller 上,却有问题!
一段代码:
// PUT /orders/1
//@Action(interceptorRefs={@InterceptorRef("authorizationStack")})
@Action(interceptorRefs={@InterceptorRef("authorization"), @InterceptorRef("restDefaultStack")})
public String update() {
ordersService.save(model);
addActionMessage("Order updated successfully");
return "success";
}

// GET /orders/1
public HttpHeaders show() {
return new DefaultHttpHeaders("show");
}

// GET /orders
public HttpHeaders index() {
list = ordersService.getAll();
return new DefaultHttpHeaders("index")
.disableCaching();
}

本以为肯定只是拦截 update方法的,但当我访问show或index方法时,拦截器也一样都执行了!
百思不得其解!
所幸又从网上看到了这篇帖子:
http://topic.csdn.net/u/20091214/11/15a63547-92b6-448e-8ddf-143fe3d243f8.html
但该文中提到的是关于convention plugin 方式的,对于rest plugin来说,有其特殊的地方,就是无法给action添加自定义的名字——@Action(value="xxx");

rest方式下,如果要执行controller的update方法,会这样:
PUT /userinfos/{id}.xml
然后会执行对应controller中的update方法。也就是说,rest方式不会要求指定方法的名字。如果我硬给update指定一个:
@Action(value="update"),会报错!提示找不到对应的action。

难道rest方式下就没有办法将拦截器添加到method级别上么?郁闷。。。

这篇关于struts2-rest-plugin 的bug?如果是的话,这个插件的问题可真够多的!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/853874

相关文章

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

解决JSONField、JsonProperty不生效的问题

《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co