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 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> mon référentiel de marque p> voici ma classe de service mon service de marque p> et ceci. p> Dans mon contrôleur, je reçois une variable de chemin avec une chaîne, j'utilise 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> voici la classe de contrôleur i Ayez jusqu'à présent. P> 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>
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>
@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;
}
3 Réponses :
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 et, utilisez cette méthode dans votre 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> année code> par
code code> dans
omnalade code> Tableau, vous devez modifier votre
interface code> comme ceci (Ajouter Une méthode abstraite):
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>
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)
}
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
@WinfredAdrah Vous n'avez pas besoin d'écrire une requête lorsque vous sélectionnez par un membre de votre entité code>. Le printemps fait ça pour vous. Donc, lorsque vous voulez Rechercher votre table par l'un des membres de votre classe d'entité i>, vous laissez simplement le ressort le savoir par Findby
OK, mais comment puis-je utiliser cela dans le contrôleur avec le code que j'écris?
Si vous n'avez pas besoin de la valeur mappong WLTH Top de la classe, http: // localhost: 8081 / Vincode / WW / QPT P>
demande de demande ("/ Vincode / {code {{code} / {société}" peut être plus utile p>
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. P>
La couche de service peut également être injectée et utilisée à tout moment. P>
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é.
Ajoutez d'abord cette instruction dans l'interface BrandeRepository: dans l'interface d'information: p> 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));
}
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?