web-dev-qa-db-fra.com

Quels sont les types de retour valides d'une méthode de contrôleur Spring MVC?

Je n'ai pas beaucoup d'expérience dans Spring MVC et j'ai les informations suivantes sur quels sont les types de retour valides qu'une méthode de contrôleur peut retourner.

Je sais donc que l'utilisateur génère un HttpRequest reçu et géré par le DispatcherServlet qui envoie cette demande à une classe de contrôleur spécifique.

Une classe de contrôleur est quelque chose comme ceci:

@Controller
public class AccountController {

    @RequestMapping("/showAccount")
    public String show(@RequestParam("entityId") long id, Model model) {
        ...
    }

    .......................................
    .......................................
    .......................................
}

Je sais donc que chaque méthode gère une demande spécifique et que la demande traitée est spécifiée par l'annotation @ RequestMapping.

Je sais également que la méthode renvoie un objet String qui est le nom de la vue logique (qui est ensuite résolu par le résolveur de vue pour rendre la vue )

Donc, à ce stade, je pense qu'une méthode d'une classe contrôleur ne retourne que String objet. Mais je n'en suis pas sûr. Peut-être qu'une méthode comme celle-ci peut également renvoyer différents types d'objets?

22
Java Surfer

Il existe de nombreux types de retour disponibles pour la méthode Handler qui est annotée par @RequestMapping à l'intérieur du contrôleur, comme:

  • ModelAndView (classe)

  • Modèle (interface)

  • Carte
  • Chaîne
  • néant
  • Vue
  • HttpEntity<?> ou ResponseEntity<?>
  • HttpHeaders

et bien plus encore ..... Voir la documentation

Chaque type de retour a son utilisation spécifique par exemple: Si vous utilisez String, cela signifie retourner le nom de la vue et ce nom de la vue sera résolu par ViewResolver. Si vous ne voulez pas retourner de nom de vue, mentionnez le type de retour comme void. Si vous souhaitez définir le nom de la vue et envoyer des données à afficher, utilisez ModelAndView comme type de retour.

Veuillez parcourir la documentation, vous apprendrez également quel type d'argument de méthode vous pouvez passer dans la méthode du gestionnaire.

22
Rajeev

Vous avez une réponse directe dans le doc

Prenez une note spéciale de la

Si la méthode est annotée avec @ResponseBody, le type de retour est écrit dans le corps HTTP de la réponse. La valeur de retour sera convertie en type d'argument de méthode déclaré à l'aide de HttpMessageConverters.

Lorsque la méthode est annotée avec @ ResponseBody , le type de retour peut être n'importe quel type personnalisé, tout Java pojo, that le framework se convertira en une représentation JSON, XML ou similaire appropriée et réécrira dans le corps de la réponse

2
Master Slave

vous pouvez jeter un œil à AnnotationMethodHandlerAdapter # getModelAndView . Cette méthode a plusieurs conditions basées sur le type de retour pour choisir quoi faire avec la valeur retournée.

1
marco.eig