是否正确处理 SQL 查询中的空值?

我使用此代码通过ID获取商家名称。


@GetMapping("pages")

public Page<WpfPaymentsDTO> pages(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size) {

    return wpfPaymentsService.findAll(page, size)

                             .map(g -> WpfPaymentsDTO.builder()

                             .id(g.getId())

                             .status(g.getStatus())

                             .merchant_id(getMerchantName(g.getMerchant_id()))

                             .build());  

}


private String getMerchantName(int id) {      

    Optional<Merchants> obj = merchantService.findById(id);       

    return obj.get().getName();

}

但是当找不到名字时,我得到这一行:java.lang.NullPointerException: null.merchant_id(getMerchantName(g.getMerchant_id()))


有没有办法设置空字符串,并且在找不到Object时不破坏代码?


慕雪6442864
浏览 83回答 4
4回答

九州编程

而不是调用使用更多可选方式的解决方案,如:obj.get().getName()obj.map(Merchants::getName).orElse("");当找不到时,它将返回空字符串。您可以在上面的代码中更改为任何其他默认值,这更适合您的情况。Merchants""如果可以的话下面的代码也会处理这种情况:g.getMerchant_id()nullprivate&nbsp;String&nbsp;getMerchantName(Integer&nbsp;id)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Optional.ofNullable(id) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMap(i&nbsp;->&nbsp;merchantService.findById(i)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(Merchants::getName) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.orElse(<default&nbsp;value>); }它将变成可选的,所以当它成为这个代码将只是返回,否则它将用于查找然后获取其名称。 在此处删除嵌套的可选选项。idnull<default value>idMerchantsflatMap

汪汪一只猫

private&nbsp;String&nbsp;getMerchantName(int&nbsp;id)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Optional<Merchants>&nbsp;obj&nbsp;=&nbsp;merchantService.findById(id);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;obj.isPresent()&nbsp;?&nbsp;&nbsp;obj.get().getName()&nbsp;:&nbsp;""; }

FFIVE

您可以返回一个空字符串,以避免如果名称为 null :NPEprivate&nbsp;String&nbsp;getMerchantName(int&nbsp;id)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Optional<Merchants>&nbsp;obj&nbsp;=&nbsp;merchantService.findById(id);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;obj.isPresent()&nbsp;?&nbsp;&nbsp;obj.get().getName()&nbsp;:&nbsp;""; }然后,该方法应该处理一个空字符串,并可能引发异常(例如)。merchant_idIllegalArgumentException

动漫人物

我认为我们可以在返回之前确定此对象是否为空
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java