0
votes

Requête personnalisée de démarrage à ressort dans le contrôleur

Comment puis-je ajouter une requête personnalisée à mon application de démarrage à ressort et l'accéder au contrôleur?

J'ai deux tables appelées carbrand code> et Annonade code>. Carbrand code> a ID code>, code code> et marque code> comme colonnes. yearmade code> a aussi id code>, code code> et an code> comme colonnes. p>

J'ai écrit mon CLASSES MODÈLES AVEC SETTER ET MÉTHODES GETTER POUR CHAQUE ENTITÉ. J'ai ajouté mes interfaces de référentiel et mes classes de service. P> xxx pré>

mon référentiel de marque p> xxx pré>

voici ma classe de service xxx pré>

mon service de marque p> xxx pré>

et ceci. p> xxx pré>

Dans mon contrôleur, je reçois une variable de chemin avec une chaîne, j'utilise substrant code> pour casser la chaîne en deux. Les deux sous-chaînes ont le code de la marque et de l'année. Les deux premiers représentent l'année et les trois autres représentent la marque. Comment puis-je comparer les codes aux codes de la base de données pour obtenir l'année et la marque réelles. P>

http: // localhost: 8081 / Vincode / wwqpt p>

Le WW est le code Pour l'année 1990, et QPT est pour Honda Motor Company dans la base de données. P>

Je veux une réponse JSON comme celle-ci p> xxx pré>

voici la classe de contrôleur i Ayez jusqu'à présent. P>

@RequestMapping("/{vincode}")
public @ResponseBody String getAttr(@PathVariable(value="vincode") String vincode) {
    String yr = vincode.substring(0,1);
    String brand = vincode.substring(2,4);
    System.out.println(yr);
    return yr;
}


0 commentaires

3 Réponses :


0
votes

Les données de ressort JPA dérive des requêtes basées sur des conventions de dénomination de la méthode. Donc, pour obtenir année code> par code code> dans omnalade code> Tableau, vous devez modifier votre interface code> comme ceci (Ajouter Une méthode abstraite): xxx pré>

et, utilisez cette méthode dans votre Année code> comme vous avez utilisé d'autres méthodes. Mais vous ne pouvez pas utiliser la même méthode pour obtenir une marque par exigence de code. Vous devrez écrire une classe de repo pour cela comme: p> xxx pré>

Vous pouvez écrire ces méthodes pour tous les membres de votre code> classe code>. Vous devez suivre la convention de dénomination pour obtenir le printemps le reconnaître. P>

EDIT STRORT> (pour montrer comment utiliser cela dans le contrôleur et la classe de service):
Anniversititory Code> Interface: P>

  @RequestController
    class YourController {
    
    //inject dependencies
    
    @Autowired
    YearService yearService;
    
    @Autowired
    BrandService brandService;
    
    @RequestMapping("/{vincode}")
    // the definition for ResponseEntity is above
    public ResponseEntity<RepsonseDto> getAttr(@PathVariable(value="vincode") String vincode) {
       // create a ReponseEntity object
       RepsonseDto retEntity = new RepsonseDto();
       
     
       // do a check for null and expected length of vincode
        if(vincode != null && vincode.length() == 5) {
        String yr = vincode.substring(0,1);
        String brand = vincode.substring(2,4);

        retEntity.setYearMade(yearService.getYearByCode(yr));
        retEntity.setBrandName(brandService.findVehicleBrand(brand));
  
        System.out.println(yr);
     
    }

 return new ResponseEntity<>(retEntity, HttpStatus.OK)
    
    }


3 commentaires

Merci pour la réponse, mais je ne sais pas comment cela s'adapte. Mais c'est le référentiel de marque que j'ai maintenant. Interface publique Brandrepository s'étend jParePository {@query ("Sélectionnez B de marque B Où brand.brand =? 1") Liste FindveHicleBrand (marque de chaîne); }


@WinfredAdrah Vous n'avez pas besoin d'écrire une requête lorsque vous sélectionnez par un membre de votre entité . Le printemps fait ça pour vous. Donc, lorsque vous voulez Rechercher votre table par l'un des membres de votre classe d'entité , vous laissez simplement le ressort le savoir par Findby . Cela créera une requête à la volée. Seulement lorsque vous avez besoin de requêtes nécessitant une jointure et des conditions complexes, vous écrivez une requête personnalisée. Plus ici


OK, mais comment puis-je utiliser cela dans le contrôleur avec le code que j'écris?



0
votes

Si vous n'avez pas besoin de la valeur mappong WLTH Top de la classe, http: // localhost: 8081 / Vincode / WW / QPT

demande de demande ("/ Vincode / {code {{code} / {société}" peut être plus utile

Il n'est pas nécessaire d'utiliser la sous-chaîne peut-être que le code ou la taille des clés de la société changements.

La couche de service peut également être injectée et utilisée à tout moment.


3 commentaires

Comment interroger la base de données?


Avez-vous défini la relation avec la marque et l'année en entités?


Il est préférable de définir la relation mais si ce n'est pas cas, utilisez la méthode FindbyCode et trouvez l'objet d'une année. Vous pouvez utiliser BrandService pour interroger avec la société.



0
votes

Ajoutez d'abord cette instruction dans l'interface BrandeRepository: xxx pré>

dans l'interface d'information: p> xxx pré>

Ajoutez cette méthode dans la classe Brandservice:

@RequestMapping("/{vincode}")
    public YearBrand getAttr(@PathVariable(value="vincode") String vincode) {
        String yr = vincode.substring(0,1);
        String brand = vincode.substring(2,4);
        return new YearBrand(yearService.findByCode(yr),brandService.findByCode(brand));
    }


2 commentaires

Merci. Mais je reçois une java.lang.nullpointException: null. Et une 500 erreur de serveur interne


Dans quelle classe vous avez Null Pointer Exception dites-moi?