我使用此代码通过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时不破坏代码?
4 回答
![?](http://img1.sycdn.imooc.com/54584c910001b8d902200220-100-100.jpg)
九州编程
TA贡献1785条经验 获得超4个赞
而不是调用使用更多可选方式的解决方案,如:obj.get().getName()
obj.map(Merchants::getName).orElse("");
当找不到时,它将返回空字符串。您可以在上面的代码中更改为任何其他默认值,这更适合您的情况。Merchants
""
如果可以的话下面的代码也会处理这种情况:g.getMerchant_id()
null
private String getMerchantName(Integer id) { return Optional.ofNullable(id) .flatMap(i -> merchantService.findById(i)) .map(Merchants::getName) .orElse(<default value>); }
它将变成可选的,所以当它成为这个代码将只是返回,否则它将用于查找然后获取其名称。 在此处删除嵌套的可选选项。id
null
<default value>
id
Merchants
flatMap
![?](http://img1.sycdn.imooc.com/5458506b0001de5502200220-100-100.jpg)
汪汪一只猫
TA贡献1898条经验 获得超8个赞
private String getMerchantName(int id) { Optional<Merchants> obj = merchantService.findById(id); return obj.isPresent() ? obj.get().getName() : ""; }
![?](http://img1.sycdn.imooc.com/533e4d2600013fe202000200-100-100.jpg)
FFIVE
TA贡献1797条经验 获得超6个赞
您可以返回一个空字符串,以避免如果名称为 null :NPE
private String getMerchantName(int id) { Optional<Merchants> obj = merchantService.findById(id); return obj.isPresent() ? obj.get().getName() : ""; }
然后,该方法应该处理一个空字符串,并可能引发异常(例如)。merchant_id
IllegalArgumentException
添加回答
举报
0/150
提交
取消