我使用此代碼通過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
提交
取消
