0
votes

Comment diviser les classes pour utiliser plusieurs @Controller

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é: xxx

L'erreur que je reçoive est xxx

s'il vous plaît laissez-moi Savoir résoudre.

code : xxx


2 commentaires

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


4 Réponses :


0
votes

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.


1 commentaires

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



1
votes

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


1 commentaires

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.



0
votes

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


1 commentaires

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.



0
votes

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

Vous pouvez utiliser @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>

Le flux idéal pour le démarrage du ressort est 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);
    }
}


0 commentaires