我正在尝试创建一种get方法,该方法将获取条形码,但返回qty != 0
。
在下面的这段代码中,我设法获得了条形码返回qty
或获取了条形码并返回qty == 0
。但是当我尝试获取qty != 0
时,我得到了这个错误
java.lang.NullPointerException: null
at com.javahelps.restservice.controller.UserController.findd(UserController.java:54) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_201]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_201]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_201]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_201]
我的代码
@GetMapping(path = "/barcode/{barcode}")
public List<User> findd(@PathVariable("barcode") String barcode,Integer qty) {
return repository.findByQty(qty != 0);
}
答案 0 :(得分:0)
Integer qty
被定义为对象。如果您的请求不包含qty
的值,则此变量的值为null
,并将null
拆箱为int
的{{1}}结果qty != null
中,因为该变量没有值,您可以取消装箱。
您还必须将映射注释添加到变量中,例如NullPointerException
。
要解决此问题,您可以添加null检查:
@RequestParam
或者您可以使原始类型@GetMapping(path = "/barcode/{barcode}")
public List<User> findd(@PathVariable("barcode") String barcode, @RequestParam Integer qty) {
if (qty == null) {
return Collections.emptyList();
}
return repository.findByQty(qty != 0);
}
的变量不允许int
的值,并且在这种情况下默认为null
:
0
答案 1 :(得分:0)
Integer qty
始终为null
,因为您没有为此值设置映射。
可以将其标记为@RequestParam
@GetMapping(path = "/barcode/{barcode}")
public List<User> findd(@PathVariable("barcode") String barcode,
@RequestParam(defaultValue = "0") Integer qty) {
return repository.findByQty(qty != 0);
}
在此代码段中:
/barcode/{barcode}?qty=666
-qty = 666
/barcode/{barcode}
-qty = 0
(默认值)或null
(如果将其定义为@RequestParam Integer qty
PS 。请不要忘记Integer
是Object
,也可以是null
。如果您设置了defaultValue
,那么将始终设置为int
。