况描述:

web工程在windows环境eclipse下编译部署没有问题,系统升级时需要运维从Git取相应的源码并编译部署到线上机器,部署启动正常没有错误,当访问业务的action时报错,如下。

错误如下

  1. java.lang.IllegalArgumentException: Name for argument type [java.lang.String]
  2. not available, and parameter name information not found in class file either.
  3. at org.springframework.util.Assert.notNull(Assert.java:112)
  4. at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.updateNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:134)
  5. at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.getNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:112)
  6. at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:81)
  7. at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:75)
  8. at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:156)
  9. at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:117)
  10. at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
  11. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
  12. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
  13. at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
  14. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
  15. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
  16. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
  17. at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
  18. at javax.servlet.http.HttpServlet.service(HttpServlet.java:114)
  19. at javax.servlet.http.HttpServlet.service(HttpServlet.java:91)
  20. at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:103)
  21. at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
  22. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
  23. at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:76)
  24. at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:158)
  25. at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:178)
  26. at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:241)
  27. at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:268)
  28. at com.caucho.server.port.TcpConnection.run(TcpConnection.java:586)
  29. at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:690)
  30. at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:612)
  31. at java.lang.Thread.run(Thread.java:662)

原因:

这个错误主要是因为action的参数标注默认是debug级别,比如

@RequestMapping(value = "/security/login", method = RequestMethod.POST)
public ModelAndView login(@RequestParam String userName, @RequestParam String password,
HttpServletRequest request) {

此时userName的级别时debug级别,而在linux下编译时是忽略了这些标注,导致请求时就会找不到userName的参数。

解决方法:

1. 修改参数的写法,比如修改为

@RequestMapping(value = "/security/login", method = RequestMethod.POST)
public ModelAndView login(@RequestParam("userName") String userName,
@RequestParam("password") String password,
HttpServletRequest request) {
......................

2.修改编译脚本

  1. SRC=$(find ./java/* | grep java$)
  2. javac -g -d ./classes  $SRC -encoding utf-8

增加 -g 参数,即编译时生成所有debug的信息。

为了这个问题费了很大劲,主要参考了了

1.http://stackoverflow.com/questions/2622018/compile-classfile-issue-in-spring-3
  这个主要是因为ant编译导致类似的问题。

2.  http://stackoverflow.com/questions/10305592/error-class-names-are-only-accepted-if-annotation-processing-is-explicitly-req    一开始src的写法有些问题,改为上面的写法便可。


最新文章

  1. java 8种基本数据类型的默认值及所占字节数
  2. RecyclerView (一) 基础知识
  3. 【BZOJ】【1045/1465】【HAOI2008】糖果传递
  4. 引擎设计跟踪(九.14.2a) 导出插件问题修复和 Tangent Space 裂缝修复
  5. 15_采用Pull解析器解析和生成XML内容
  6. BAE Flask UEditor 使用七牛云
  7. cnn softmax regression bp求导
  8. 吞吐量(Throughput)、QPS、并发数、响应时间(RT)对系统性能的影响
  9. 工作经常使用的SQL整理
  10. 201521123021第二周Java学习总结
  11. 习题9-8 uva1631
  12. 如何在ASP.NET Core中使用JSON Patch
  13. wps直接打开CVS文件会把长串数字订单号最后4位变为0
  14. 第四百一十四节,python常用算法学习
  15. window、Linux 文本文件转换
  16. 如何利用 LTE/4G 伪基站+GSM 中间人攻击攻破所有短信验证
  17. \extras\intel\Hardware_Accelerated_Execution_Manager HAXM 未安装导致AndroidStudio新建了模拟器开启不了
  18. [Luogu5106]dkw的lcm
  19. 跟我学Makefile(三)
  20. 一、CSS实现横列布局的方法总结

热门文章

  1. HMaster高可用
  2. NX二次开发-获取切换按钮的当前状态UF_MB_ask_toggle_state
  3. JQuery validate验证规则
  4. SpringIOC中的注解配置
  5. JDBC_Template(简化代码)
  6. java oop遍历List和Map的几种方法
  7. input的placeholder颜色修改
  8. iOS开发系列-iOS适配
  9. http协议 头部字段 referrer
  10. ubuntu切换到root用户