No mapping found for dependency 400 请求报错 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

No mapping found for dependency 400 请求报错 

kun坤 2020-05-29 23:03:44 101

No mapping found for dependency [type=java.lang.String, name='struts.devMode']

@康杰 你好,想跟你请教个问题:

No mapping found for dependency [type=java.lang.String, name='struts.devMode'] 这种问题你解决过吗?

我在 struts 版本升级 2.1.8 升级到 2.3.16.3 是出错,一直解决不了。

Java
分享到
取消 提交回答
全部回答(1)
  • kun坤
    2020-05-29 23:03:50

    这个问题貌似是jar包冲突所导致,我之前遇见过相同的问题。你导入了哪些jar包,贴图出来看看######struts2-convention-plugin-2.3.16.3.jar struts2-core-2.3.16.3.jar struts2-json-plugin-2.3.16.3.jar struts2-spring-plugin-2.3.16.3.jar xwork-core-2.3.16.3.jar 版本都是一致的。###### struts2-convention-plugin-2.3.16.3.jar
    struts2-core-2.3.16.3.jar
    struts2-json-plugin-2.3.16.3.jar
    struts2-spring-plugin-2.3.16.3.jar
    xwork-core-2.3.16.3.jar
    版本都是一致的。

    ######不是struts2的包,是其它的包与struts2有冲突###### 虽然时间过去2年了.我还是补个答案吧,
    出现这个问题,是因为使用 了Codebehind Plugin的包(你可以去查找下你的jar包,有这两个关键字的)。貌似早期这个的使用需要去web.xml文件里面,在struts的过滤器下配置init-param参数,参数名为actionPackages,参数的值是你的使用了annotation标签的java文件,这样他才会解析annotation。出现上面那个报错的原因,就是因为Codebehind Plugin他需要上面配置的参数去查找配置annotation的类,而没有配置的情况下,他找不到,于是报那个问题。
    在2.1之后,使用了Convention Plugin 替代了Codebehind Plugin ,所以已经不需要配置init-param参数,所以你可以直接去掉Codebehind Plugin 的包,只要遵守Convention Plugin 要求的规则,他就会自动去解析对应的使用了annotation的文件,大致规则就是:
    1. 扫描其位于包( “struts, struts2, action 或 actions“)的命名注解的类.
    2. 接着,扫描相匹配下列任一条件的文件:
      实例了 com.opensymphony.xwork2.Action 接口。
      扩展了 com.opensymphony.xwork2.ActionSupport 类
      文件名用动作(例如:UserAction,LoginAction)结束
    (参考内容:http://struts.apache.org/docs/convention-plugin.html#ConventionPlugin-Introduction ,在介绍的时候就写明了)

    我不确认你是不是跟我一样的问题,我是使用annotation的时候发现的。因为我只使用了No mapping found for dependency [type=java.lang.String, 这几个关键字来查询。不过看这句的意思是没有发现依赖的配置信息,我想多半是在加载的时候找不到action的配置信息,所以把我的原因写上,有后来者的话可以参考下。

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程