Spring MVC 如何在带有注解的对象中放置默认值?(@RequestParam)

ss2ws0br  于 2022-11-14  发布在  Spring
关注(0)|答案(2)|浏览(189)

是否可以使用@RequestParam为对象提供默认值?
当我将form标签命名为与对象中的字段相同时,我知道它会自动为对象赋值。但如果对象的字段是int,则输入空值,会发生错误。
Plant_list2VO class的时候
form的时候
controller

public String reg4(HttpServletRequest request, HttpServletResponse response,
                    Plant_list2VO plant_list2VO, 
                    @RequestParam(name="inv_count", defaultValue="0") int inv_count,
                    @RequestParam(name="inv_count_disable", defaultValue="2") int inv_count_disable,
                    Model model) {
    
}

★控制台:

WARN : org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors
Field error in object 'plant_list2VO' on field 'inv_count': rejected value [];
    codes [typeMismatch.plant_list2VO.inv_count,typeMismatch.inv_count,typeMismatch.int,typeMismatch];
    arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [plant_list2VO.inv_count,inv_count]; arguments [];
    default message [inv_count]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'inv_count'; nested exception is java.lang.NumberFormatException: For input string: ""]
Field error in object 'plant_list2VO' on field 'inv_count_disable': rejected value [];
    codes [typeMismatch.plant_list2VO.inv_count_disable,typeMismatch.inv_count_disable,typeMismatch.int,typeMismatch];
    arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [plant_list2VO.inv_count_disable,inv_count_disable]; arguments []; default message [inv_count_disable]];
    default message [Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'inv_count_disable'; nested exception is java.lang.NumberFormatException: For input string: ""]]
ujv3wf0j

ujv3wf0j1#

我看到您将inv_count和inv_count_disable定义为int属性。因此,您应该将defaultValue的值更改为一个数字以解析java.lang.NumberFormatException

shstlldc

shstlldc2#

根据控制台日志判断,传递给控制器的inv_countinv_count_disable值不是null,而是空String。
我可以假设您使用的是旧版本的Spring,因为在3.2.x版本之前,AbstractNamedValueMethodArgumentResolver接受空String值作为实际值(请参见方法resolveArgumenthere),并且在这种情况下不使用defaultValue,从而导致转换异常,因为空String无法转换为整数。
在Spring 3.2.x和更高版本中,空字符串被视为没有传递值,如果存在,则使用defaultValue(请参见方法resolveArgumenthere)。
因此,如果您想坚持使用较旧版本的Spring,您可能需要更改表单,以便在字段为空时发送一些默认数字,或者创建一个DTO,其中这些字段的类型为String,并在setter中使用一些逻辑。
这也可能有助于:Is it possible to have empty RequestParam values use the defaultValue?

相关问题