2016-05-22 5 views
0

Hallo, ich versuche, eine Suche mit 4 Felder, aber einige von ihnen möglicherweise Null, wenn ich die Suche machen. Deshalb habe ich mich für queryDsl entschieden. Das ist mein pom.xmlNull-Zeiger-Ausnahme, wenn ich QueryDsl verwenden Prädikat von SpringData

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

I ClientPredicate.java

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); 
     } 

    } 

Und ich habe diesen Code in meinem Controller gemacht:

@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; 

    } 

Die p Jedes Mal, wenn ich ein leeres Feld sende, bekomme ich eine nullPointerException. Irgendwelche Hilfe bitte. Es ist Stunden, dass ich blockiert bin

Antwort

0

Ich erwarte "sende ein leeres Feld" bedeutet, dass in Ihrem Controller der Parameter null ist. Daher wird beim Zugriff auf die Methoden eine Ausnahme ausgelöst. Fügen Sie einen Null-Check im Controller hinzu und Sie sollten gut sein.

+0

wenn ich hinzufügen sollte checks was ist der Nutzen von querydsl Ich könnte überprüfen und einfache Abfragen machen ?? rechts – zzooee

+0

Besuchen Sie die erste und zweite Zeile Ihres Controllers. Sie rufen die Methoden getFirstname und getLastname für den Methodenparameter auf. Dies ist nicht möglich, wenn es null ist. –

Verwandte Themen