在使用SpringMVC绑定基本类型(如String,Integer等)参数时,应通过@RequestParam注解指定具体的参数名称,否则,当源代码在非debug模式下编译后,运行时会引发HandlerMethodInvocationException异常,这是因为只有在debug模式下编译,其参数名称才存储在编译好的代码中。
譬如下面的代码会引发异常:
@RequestMapping(value = "/security/login", method = RequestMethod.POST)
public ModelAndView login(@RequestParam String userName, @RequestParam String password,
HttpServletRequest request) {
......................
如果使用Eclipse编译不会在运行时出现异常,这是因为Eclipse默认是采用debug模式编译的,但是如果使用Ant通过javac任务编译的话就会出现异常,除非指定debug=”true”。出现的异常如同:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.ModelAndView com.mypackage.security.controller.LoginController.login(java.lang.String,java.lang.String,javax.servlet.http.HttpServletRequest)]; nested exception is java.lang.IllegalStateException: No parameter name specified for argument of type [java.lang.String], and no parameter name information found in class file either.
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:659)
..........
org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.ModelAndView com.mypackage.security.controller.LoginController.login(java.lang.String,java.lang.String,javax.servlet.http.HttpServletRequest)]; nested exception is java.lang.IllegalStateException: No parameter name specified for argument of type [java.lang.String], and no parameter name information found in class file either.
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
..........
java.lang.IllegalStateException: No parameter name specified for argument of type [java.lang.String], and no parameter name information found in class file either.
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.getRequiredParameterName(HandlerMethodInvoker.java:618)
..........
最好的做法是通过@RequestParam注解指定具体的参数名称,如,上面的代码应该如此编写(注意@RequestParam部分):
@RequestMapping(value = "/security/login", method = RequestMethod.POST)
public ModelAndView login(@RequestParam("userName") String userName,
@RequestParam("password") String password,
HttpServletRequest request) {
......................
参考:http://stackoverflow.com/questions/2622018/compile-classfile-issue-in-spring-3
分享到:
相关推荐
Spring MVC通过一系列预定义的解析器,如`RequestParamMethodArgumentResolver`、`PathVariableMethodArgumentResolver`等,来解析和绑定不同的参数类型。当控制器方法被调用时,Spring MVC会遍历这些解析器,直到...
- **控制器方法签名**:控制器方法的参数可以是基本类型、对象或数组,Spring MVC会尝试将请求参数与这些参数进行匹配。 - **注解驱动**:Spring MVC使用注解如`@RequestParam`、`@PathVariable`、`@ModelAttribute...
本文将详述如何在Spring MVC中实现对Set类型的参数进行绑定,以解决可能遇到的问题。 首先,理解Spring MVC的数据绑定机制是至关重要的。Spring MVC在接收到HTTP请求后,会尝试将请求参数与控制器方法的参数进行...
首先,参数绑定可以分为基本类型参数绑定和对象类型参数绑定。在基本类型参数绑定中,要求前端请求中的参数名必须与后端方法的参数名一致。对于特殊数据类型,如日期类型,如果前端发送的日期格式与SpringMVC默认...
在SpringMVC中,数据绑定和数据类型转换是两个关键的概念,它们对于构建高效、健壮的Web应用至关重要。 **数据绑定**是SpringMVC中的一种机制,允许我们将用户通过表单或其他方式提交的请求参数自动绑定到控制器中...
总之,扩展Spring MVC以支持绑定JSON格式的请求参数,需要理解模型绑定机制,配置合适的`HttpMessageConverter`,以及处理可能出现的验证、安全等问题。通过这些步骤,我们可以创建出高效、健壮且易于维护的RESTful...
在Spring MVC框架中,高级参数绑定是一个核心特性,它允许开发者高效地处理HTTP请求中的数据,包括多选、数组和集合等复杂类型的参数。在这个场景中,我们需要实现一个功能,让用户能够在商品列表页面上选择多个商品...
- **自定义类型**:开发者可以根据需求定义自己的复杂类型,Spring MVC会尝试自动绑定请求参数到这些类型的属性上。 ### 2. `@RequestParam`注解 对于那些不是通过模型绑定(ModelDriven)或者命令对象(Command ...
使用`@ModelAttribute`注解,我们可以将请求参数绑定到对象属性上: ```java @PostMapping("/save") public String saveUser(@ModelAttribute("user") User user) { // ... } ``` 用户类可能如下所示: ```...
SpringMVC自定义参数绑定实现详解 SpringMVC自定义参数绑定实现详解主要介绍了SpringMVC自定义参数绑定实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以...
在这个过程中,SpringMVC会自动进行数据绑定,将请求参数映射到Controller方法的参数上。 数据绑定分为两种类型:入参绑定和出参绑定。入参绑定是将请求参数值绑定到Controller方法的参数上,例如,如果我们有如下...
当请求参数的类型与模型对象的属性类型不匹配时,SpringMVC会使用类型转换器进行转换。你可以自定义类型转换器以满足特定需求。 10. **数据验证(Data Validation)**: SpringMVC支持JSR-303/JSR-349数据验证...
3. **非强类型**:`setValue(Object)`方法可以接受任何类型的参数,这可能导致类型不匹配的问题,需要开发者自行进行类型检查。 4. **自定义验证困难**:数据验证过程需要手动实现,缺乏统一的接口或框架支持。 ###...
本教程系列详细介绍了SpringMVC的参数绑定过程和各种类型的支持。 在SpringMVC参数绑定过程中,当客户端发送请求时,其中的key/value数据会被处理,通过参数绑定组件转化成Controller方法的形参。早期版本的...
- 注意事项:直接在控制器方法的形参中使用`List`类型无法完成参数绑定,需要将其作为实体类的一个属性进行传递。 #### 二、@RequestMapping 注解 ##### 2.1 @RequestMapping 注解的作用 - **作用一**:配置请求...
在这个名为"springmvc-demo05-数据绑定(接受参数)"的项目中,我们将深入探讨Spring MVC如何实现这一特性。 1. **数据绑定的基本概念** 数据绑定是将用户输入或者HTTP请求参数自动映射到Java对象的属性上的过程。...
3. **默认配置不当**:Spring MVC的默认配置可能允许过于宽松的数据绑定,例如允许空值绑定到非null字段,或者允许任意类型的参数绑定。 针对这些风险,开发者可以采取以下措施来增强Spring MVC应用的安全性: 1. *...
通过这个"springmvc数据绑定示例程序",你可以学习到Spring MVC如何处理请求参数,如何将数据绑定到模型,以及如何在视图中展示这些数据。同时,它也涵盖了数据验证和自定义数据转换的使用,这些都是构建高效、健壮...
总的来说,SpringMVC 的数据绑定提供了强大的功能,使得开发者能够方便地处理各种类型的数据,包括基本类型、自定义类型以及集合和 Map 类型。通过自定义 `PropertyEditor` 和利用验证机制,我们可以确保数据的正确...
SpringMVC提供了内置的类型转换器,可以将请求参数转换为Java对象的适当类型。同时,通过`@Valid`注解,可以启用JSR-303/JSR-349提供的数据验证。例如: ```java public String register(@Valid User user, ...