问题抛出
Optional int parameter 'currpage' is present but cannot be translated into a null value due to being dec
大意是说 如果参数是非必须的,则会赋值为null,因此参数应该是一个object,它才能接受这个null值。
而上面代码参数currpage的类型 为 int,它接受不了null值。
解决方法:
将int改为对象类型Integer
详解
1、当 controller 方法中的参数类型为基本数据类型时。如果页面提交过来的数据为 null 或 "", 会出现数据转换的异常。
2、当 controller 方法中的参数类型为基本数据类型的包装类型时,页面传递过的数据可以为 "",null 或无该参数提交。当此方法执行时,该包装类型参数自动设为 null (包装类可以设为 null)。如果被其他方法调用可能抛空指针异常。比如 Controller 方法中存在一个 Long parentId 参数,如果页面没有提交该参数。则 parentId 自动被设置为 null。
注意,如果使用值为 null 的包装类型进行拆包时,会抛空指针异常。当将 parentId (null) 作为参数传递到某方法中时 (该方法中的参数为基本数据类型), 编译时不会抛异常。但是运行时,此包装类型的参数 (null) 会进行拆包,此时会抛空指针异常!此异常为运行时异常。当然,如果直接将此 parentId 与基本数据类型运算,同样也会抛空指针异常。
总结:
1、如果使用基本数据类型,无法接受 null 值和 "" 值。可能发生数据转换异常;
2、 如果使用包装类型,可以接受 null 值和 ""值,但是可能在参数传递时发生空指针异常。解决办法是在此变量在方法间传递时,全部使用包装类型。这样,此参数可以接收页面传递的"" 或 null 值。这样,调用此参数发生异常时,会在问题位置抛出。