用id获取,返回另一个变量

时间:2020-10-25 09:22:51

标签: java spring-boot

我正在尝试创建一种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);
}

2 个答案:

答案 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 。请不要忘记IntegerObject,也可以是null。如果您设置了defaultValue,那么将始终设置为int