2016-05-22 17 views
0

こんにちは、私は4つのフィールドを使って検索しようとしていますが、検索を行うとnullの可能性があります。だから私はqueryDslを選んだのです。 これは私がClientPredicate.javaqueryDslを使用するとNULLポインタ例外が発生するSpringDataの述語

final class ClientPredicates { 

    private ClientPredicates() { 
    } 

    static Predicate firstnameOrLastnameOrCinOrPhoneNberContainsIgnoreCase(String searchTerm) { 
     if (searchTerm == null || searchTerm.isEmpty()) { 
      return (Predicate) QClient.client.isNotNull(); 
     } else { 
      return (Predicate) QClient.client.firstname.containsIgnoreCase(searchTerm) 
        .or(QClient.client.lastname.containsIgnoreCase(searchTerm)).or 
        (QClient.client.cin.containsIgnoreCase(searchTerm)).or(QClient.client.phoneNber.containsIgnoreCase(searchTerm)); 
     } 
    } 

    } 

QClient.java

@Generated("com.mysema.query.codegen.EntitySerializer") 
    public class QClient extends EntityPathBase<Client> { 

     private static final long serialVersionUID = -797939782L; 

     public static final QClient client = new QClient("client"); 

     public final StringPath createdByUser = createString("createdByUser"); 

     public final DateTimePath<java.time.ZonedDateTime> creationTime = createDateTime("creationTime", java.time.ZonedDateTime.class); 

     public final StringPath firstname = createString("firstname"); 
     public final StringPath lastname = createString("lastname"); 
     public final StringPath cin = createString("cin"); 
     public final StringPath phoneNber = createString("phoneNber"); 

     public final NumberPath<Long> id = createNumber("id", Long.class); 

     public final DateTimePath<java.time.ZonedDateTime> modificationTime = createDateTime("modificationTime", java.time.ZonedDateTime.class); 

     public final StringPath modifiedByUser = createString("modifiedByUser"); 



     public final NumberPath<Long> version = createNumber("version", Long.class); 

     public QClient(String variable) { 
      super(Client.class, forVariable(variable)); 
     } 

     public QClient(Path<Client> path) { 
      super(path.getType(), path.getMetadata()); 
     } 

     public QClient(PathMetadata<?> metadata) { 
      super(Client.class, metadata); 
     } 

    } 

そして、私のコントローラで、私はこのコードを持って作られた私のpom.xml

<dependency> 
      <groupId>com.mysema.querydsl</groupId> 
      <artifactId>querydsl-jpa</artifactId> 
     </dependency> 

です:

@RequestMapping(value = "/seekClient", method = RequestMethod.POST, headers = "Accept=application/json") 
    public @ResponseBody List<Client> seekClient(@RequestBody Client client) { 

     Predicate firstnameAndLastnameAndCinAndPhoneNberAre = QClient.client.firstname.eq(client.getFirstname()) 
       .and(QClient.client.lastname.eq(client.getLastname())); 

     System.out.println("*************************** "+firstnameAndLastnameAndCinAndPhoneNberAre); 
     List<Client> list = (List<Client>) clientRepository.findAll(firstnameAndLastnameAndCinAndPhoneNberAre); 

     return list; 

    } 

p私が空のフィールドを送信するたびに、私はnullPointerExceptionを取得しています。 助けてください。私はブロックされている時間があります

答えて

0

私は "空のフィールドを送信する"と考えていますあなたのコントローラでは、パラメータがnullです。したがって、そのメソッドにアクセスすると例外がスローされます。コントローラーにヌルチェックを追加すれば、良い結果が得られます。

+0

私はquerydslのユーティリティは何ですかチェックを追加する必要があります私はチェックを使用して簡単なクエリを行うことができますか?右 – zzooee

+0

コントローラの1行目と2行目を再確認してください。メソッド・パラメーターでgetFirstnameメソッドとgetLastnameメソッドを呼び出しています。これがnullの場合、これは不可能です。 –

関連する問題