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