2012-07-23 40 views
7

Tôi có đoạn mã sau sử dụng lò xo ngôn ngữ biểu hiện:Xử lý giá trị null trong mùa xuân biểu hiện ngôn ngữ

StandardEvaluationContext stdContext = new StandardEvaluationContext(); 
stdContext.setVariable("emp", filterInputData); 
ExpressionParser parser = new SpelExpressionParser();  
parser.parseExpression("#emp.?[name.toLowerCase().contains('Hari')]").getValue(stdContext); 

nơi emp là tên của hạt cà phê. Ở đây tên có thể là null và khi gọi name.toLowerCase() Tôi nhận được một ngoại lệ nullpointer. Làm thế nào để xử lý các giá trị null trong kịch bản này? Tôi cần gọi số toLowercase() chỉ với các giá trị không null.

+1

'toLowerCase(). Chứa ('Hari') 'luôn là' FALSE' – OrangeDog

Trả lời

19
"#emp.name != null ? #emp.name.toLowerCase().contains('hari') : null" 

hoặc

"#emp.name != null ? #emp.name.toLowerCase().contains('hari') : false" 

tùy thuộc vào những gì bạn muốn trở lại khi tên bị thiếu.

Trên thực tế, hình thức ngắn này hoạt động quá ...

"#emp.name != null ? toLowerCase().contains('hari') : null" 

BTW, trong câu hỏi ban đầu của bạn ...

name.toLowerCase().contains('Hari') 

sẽ không bao giờ trở thành sự thật (H là chữ in hoa).

Hoặc, Elvis là bạn của bạn ...

Expression expression = new SpelExpressionParser().parseExpression("#emp.name?:'no name found'"); 
value = expression.getValue(context, String.class).toLowerCase(); 
+0

Hi, Rất cám ơn cho câu trả lời của bạn. Trong trường hợp của tôi, nhân viên là một tập hợp các đối tượng. Vì vậy, tôi cần lấy tên từ bộ sưu tập. Tôi đã thử với "#emp.? [Name! = Null? ToLowerCase(). Contains ('hari'): null]", nhưng nó không hoạt động và tôi nhận được một thông báo nói rằng phương thức toLowercase không tồn tại trong EmployeeDto , Bạn có thể vui lòng giúp tôi khắc phục sự cố này không. Rất cám ơn – user1293071

+0

Bạn không chắc chắn lý do tại sao bạn đang cố gắng sử dụng lựa chọn bộ sưu tập. Nếu bộ sưu tập của bạn là một bản đồ, điều này hoạt động tốt ... "#emp ['name']! = Null? #emp ['name']. ToLowerCase(). Contains ('hari'): false" –

+0

Nó hoạt động, Rất cám ơn sự hỗ trợ của bạn và giúp tôi tìm một giải pháp – user1293071

0

Bạn có thể Tự động chuyển bean này sang lớp học của mình không?

Cái gì như:

public class YourClass{ 
    @Autowire 
    private Employee emp 

    public boolean func(){ 
     if (emp.getName() != null){ 
      return emp.getName().toLowerCase().contains('Hari'); 
     }else{ 
      return false; 
     } 
    } 
} 
Các vấn đề liên quan