2017-11-08 1 views
0

Ich versuche einfach REST-API für Daten mit zwei optionalen params verfügbar Abfrage zu belichten:Spring Data - mit optionals Abfrage withoud if-else

GET myServ/greeting?message=X&type=Y 

Leider mit dem richtigen Federdatenkonfiguration Ich bin stucked um eine korrekte Abfrage zu ermöglichen. Im Folgenden Methoden

sollte
  • GET myserv/Gruß - Rückkehr jeder Gruß
  • GET myserv/Gruß message = X - kommen jedes mit Nachricht Gruß = X
  • GET myserv/Gruß type = Y - kommen jedes mit Typ-Gruß = Y
  • GET myserv/Gruß message = X & type = Y - Rückkehr jeder mit Meldung Gruß = X UND type = Y

Einfach wie es sein kann - aber ich nicht wan t zu schreiben, wenn sonst Code in meinem Controller! Ist eine Out-of-Box-Konfiguration aktiviert, die zu einem Unterverhalten führt? Ich probierte verschiedene Mischung von Standard JpaReposotory Methoden und ExampleMatchers aber immer noch kann ich es nicht funktionieren lassen.

Mein Modell:

package my.model; 

import lombok.*; 
import javax.persistence.*; 

@Entity 
@AllArgsConstructor 
@NoArgsConstructor 
@Builder 
@Getter 
@ToString 
public class Greeting { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    private String message; 
    private String type; 
} 

Repository:

package my.repository; 

import my.model.Greeting; 
import org.springframework.data.jpa.repository.JpaRepository; 

public interface GreetingRepository extends JpaRepository<Greeting, Long>{ 
} 

web-Controller:

package my.web; 

import my.model.Greeting; 
import my.repository.GreetingRepository; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.bind.annotation.RestController; 
import java.util.List; 
import static org.springframework.web.bind.annotation.RequestMethod.GET; 

@RestController 
public class GreetingController { 

    @Autowired 
    private GreetingRepository repository; 

    @RequestMapping(value = "/greeting", method = GET) 
    public List<Greeting> get(
      @RequestParam(value = "message", required = false) String message, 
      @RequestParam(value = "type", required = false) String type){ 

     return HOW_TO_DO_IT??; 
    } 
} 

Antwort

0

Wenn das Unternehmen ist, dass einfache Verwendung Query By Example. Ihr Repository muss zusätzlich erweitert werden QueryByExampleExecutor<Greeting>. Dadurch wird die Methode findAll(Example<S> example) zu Ihrem Repository hinzugefügt. Dann rufen Sie es mögen:

Example<Greeting> example = Example.of(new Greeting("someMessage", "aType")); 
repo.findAll(example); 

Andere Optionen die Kriterien API und QueryDSL sind. Alle drei Optionen sind here erwähnt.

Verwandte Themen