是否可以使用@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: ""]]
2条答案
按热度按时间ujv3wf0j1#
我看到您将inv_count和inv_count_disable定义为int属性。因此,您应该将
defaultValue
的值更改为一个数字以解析java.lang.NumberFormatException
shstlldc2#
根据控制台日志判断,传递给控制器的
inv_count
和inv_count_disable
值不是null,而是空String。我可以假设您使用的是旧版本的Spring,因为在3.2.x版本之前,
AbstractNamedValueMethodArgumentResolver
接受空String值作为实际值(请参见方法resolveArgument
here),并且在这种情况下不使用defaultValue
,从而导致转换异常,因为空String无法转换为整数。在Spring 3.2.x和更高版本中,空字符串被视为没有传递值,如果存在,则使用
defaultValue
(请参见方法resolveArgument
here)。因此,如果您想坚持使用较旧版本的Spring,您可能需要更改表单,以便在字段为空时发送一些默认数字,或者创建一个DTO,其中这些字段的类型为
String
,并在setter中使用一些逻辑。这也可能有助于:Is it possible to have empty RequestParam values use the defaultValue?