当前位置: 首页 > 知识库问答 >
问题:

如何在带注释的对象中放一个默认值?(@RequestParam)

邹齐智
2023-03-14

是否可以使用@请求参数为对象赋予默认值?

当我将表单标记命名为对象中的字段时,我知道它会自动为对象分配值。但如果对象的字段是int,则输入空值,则会发生错误。

★Plant_list2VO类

★ 形式

★控制器:

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个答案

司健柏
2023-03-14

根据控制台日志判断,传递给控制器的inv_countinv_count_disable值不是null,而是空字符串。

我可以假设您使用的是Spring的旧版本,因为在3.2.x版本之前,空字符串值被< code > AbstractNamedValueMethodArgumentResolver 接受为实际值(请参见此处的< code>resolveArgument方法),而< code>defaultValue在那种情况下没有使用,导致转换异常,因为空字符串不能转换为整数。< br >在3.2.x和更高版本的Spring中,空字符串被视为没有传递任何值,如果存在,则使用< code>defaultValue(请参见此处的< code>resolveArgument方法)。

因此,如果您想坚持使用旧版本的Spring,您可能需要更改表单以在字段为空时发送一些默认数字,或者创建一个DTO,其中这些字段的类型为<code>String</code>,setter中有一些逻辑。

这也可能会有所帮助:是否可以让空的 RequestParam 值使用默认值?

顾永福
2023-03-14

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

 类似资料:
  • 我正在使用Lombok注释,但我希望一些字段是可选的,并默认为,以避免NPE。有没有一个简单的方法可以做到这一点?我什么也找不到。 或者,一种自定义的方法,用于在变量为时返回默认值。

  • 我有一门课,比如下面的测试 有一个C1班 我给这门课打电话如下 当我调试时,我将i1设置为null。 请告知我做错了什么 注意:。我必须在xyx()中使用类Test,因为它是伪代码,并且xyx()中有很多代码

  • 如果我在spring的控制器中有一个映射,比如: 我可以做一个注释,并将默认值10封装在上面吗?比如: 让spring像预期的那样理解我的注释。我发现https://stackabuse.com/spring-annotations-requestmapping-and-its-variants/当我看到他们用@GetMapping、@PostMapping等工具所做的事情时,我有点满怀希望。 但

  • 问题内容: 我知道SO和网络上都有很多这些问题,但是所有答案都建议使用特定于数据库的信息,因此不适用于我,因为我正在使用的系统需要在不同的数据库上运行。 我发现这个hibernate问题,有人要求使用此功能进行注释。该问题已经解决,表示另一个问题将涉及该功能。第二个问题显然添加了注释以及其他一些注释,但是我找不到有关如何使用这些新注释定义默认列值的文档。 所以我的问题是:有谁知道我该如何定义带注释