我使用此代码通过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 回答
九州编程
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>);
}它将变成可选的,所以当它成为这个代码将只是返回,否则它将用于查找然后获取其名称。 在此处删除嵌套的可选选项。idnull<default value>idMerchantsflatMap
汪汪一只猫
TA贡献1898条经验 获得超8个赞
private String getMerchantName(int id) {
Optional<Merchants> obj = merchantService.findById(id);
return obj.isPresent() ? obj.get().getName() : "";
}
FFIVE
TA贡献1797条经验 获得超6个赞
您可以返回一个空字符串,以避免如果名称为 null :NPE
private String getMerchantName(int id) {
Optional<Merchants> obj = merchantService.findById(id);
return obj.isPresent() ? obj.get().getName() : "";
}然后,该方法应该处理一个空字符串,并可能引发异常(例如)。merchant_idIllegalArgumentException
添加回答
举报
0/150
提交
取消
