J'apprends des bottes de printemps et j'ai développé l'exemple ci-dessous. Je voudrais annoter une classe comme contrôleur à l'aide de @Controller. Cette classe a un constructeur et je souhaite avoir accès à GreetingFromDeucontroller, comme indiqué: L'erreur que je reçoive est p> s'il vous plaît laissez-moi Savoir résoudre. P> code strong>: p>
4 Réponses :
Aussi loin que je suis concerné, @RequestMapping n'est pas destiné aux constructeurs. Il devrait être utilisé pour annoter des méthodes ou des classes. Méthodes responsables de la manipulation des demandes. p>
mais comme indiqué dans le code affiché, la méthode est juste un getter, mais j'ai besoin du constructeur pour l'initialiser.Veuillez comment puis-je le faire
Tout d'abord, votre constructeur reçoit beaucoup avant de frapper votre URL. Vous devez donc travailler sur votre conception ou dites-moi votre exigence de votre entreprise et je vais essayer de vous fournir une solution. Ma solution de code de refacteur vous aidera à atteindre cela en deux étapes. Première méthode postale à succès qui fonctionnera sur la variable de réglage, puis les hits suivants de la méthode de GET renvoient cette valeur définie.
Nous pouvons reflacter le code comme ci-dessous. Il expliquera l'utilisation de requestmapping sur la méthode et la classe. P>
Considérant que nous devons écrire deux API, une pour la lecture et une pour écrire. P>
URL: P>
1. POST http://localhost:8080/example/greetings (in request body send {str:'hi'}) 2. GET http://localhost:8080/example/greetings @Controller @RequestMapping("/example") public class GreetingFromDeuController { private String str; @RequestMapping(value="/greetings" , method = RequestMethod.POST) public void setGreetingFromDeu(@RequestBody(value = "str") String str) { this.str = str; } @RequestMapping(value="/greetings" , method = RequestMethod.GET) public String getGreetingFromDeu() { return this.str; } }
Oui. Vous pouvez la variable AutoWire STR. Il n'y a aucune restriction à ce sujet. Assurez-vous simplement que dans le contexte avant de charger cette classe, le haricot de cordes compatible est disponible quel ressort peut s'attacher à STR.
the @RequestMapping Documentation dit:
Annotation pour la cartographie des demandes Web
sur les méthodes forte> dans la manutention de la demande classes avec des signatures de méthode flexibles. P> blockQquote> Ensuite, vous ne pouvez pas faire cela, si vous souhaitez initialiser vos variables ou tout ce que vous pouvez utiliser de plusieurs manières: p>
1.- Utilisez @ postconstruct p>
xxx pré> 2.- Utilisez une simple demande pour définir quelque chose que p>
xxx pré> 3.- Utilisez @ Valeur p>
dans application.Properties / applications.YAML P>
@Value("${properties.str:default}") // by default str is "default" public String str; @RequestMapping(value="/greetings" , method = RequestMethod.GET) public String getGreetingFromDeu() { return this.str; }
THX, au point 2, la méthode renvoie une chaîne, mais le corps ne contient pas de déclaration de retour ..vriez-lui renvoyer le vide ou la chaîne.
Vous pouvez utiliser Le flux idéal pour le démarrage du ressort est @RequestMappe code> doit être utilisé pour
Demande de carte avec terminal code> em>. qui peut être utilisé comme niveau de classe et de niveau de méthode. em>
@rescontroller code> (amélioré de
@Controller code> href = "https://stackoverflow.com/questions/6827752/whats-the-Difefence-between-component-repository-service-annotations-in/56882597#56882597"> Voir la différence ) em>. P>
contrôleur -> Service -> référentiel code> em> p>
@RestController
@RequestMapping("/api")
public class GreetingController {
@Autowired GreetinService greetingService;
// Request http://localhost:8080/api/GreetingFrom
@GetMapping("/GreetingFrom")
public ResponseEntity<String> GreetingRequestParam(@RequestParam(value = "name") String name) {
greetingService.performBusinessLogic(name);
return new ResponseEntity<String>("Greetings from "+name,HttpStatus.OK);
}
// Request http://localhost:8080/api/GreetingFrom/user2121
@GetMapping("/GreetingFrom/{name}")
public ResponseEntity<String> GreetingPathVariable(@PathVariable(value = "name") String name) {
return new ResponseEntity<String>("Greetings from "+name,HttpStatus.OK);
}
}
@RequestMappage code> est uniquement destiné aux méthodes dans un contrôleur ou au niveau de la classe.
Bonjour @ user2121, veuillez vous référer à ma réponse et laissez-moi savoir vos pensées à ce sujet