[JAVA] Spring Boot à partir de zéro Partie 2

Cible

Il sera mis en œuvre plusieurs fois.

  1. Ayez une idée approximative de ce qu'est Spring Boot
  2. Afficher la construction de l'environnement et Hello World!
  3. ** Passer les paramètres et les objets ** ← Que faire cette fois </ font>
  4. Essayez d'autres fonctionnalités

Préface

La dernière fois, j'ai fait les deux choses suivantes pour afficher Hello World.

--Afficher la chaîne de caractères avec @ RestController --Afficher index.html avec @ Controller

Le projet continuera à utiliser celui créé la dernière fois. Plus précisément, nous ferons ce qui suit. Il existe deux manières principales d'y parvenir. Commençons par @ RequestParam.

Passons les paramètres (édition RequestParam)

Réécrivez la partie «» de «index.html» comme suit.

index.html


<body>
<form action="/hello" method="get">
Nom:
<input type="text" name="username">
<input type="submit" value="Envoyer">
</form>
</body>
Cliquez ici pour une description des différentes balises.
marque Nom de l'élément Contenu
form action Spécifiez l'URL pour envoyer la demande.
method Sélectionnez et spécifiez la méthode de transmission à partir de GET et POST.
input type="text" Champ de texte.
name Le nom donné au paramètre. Utilisé pour accéder au côté Java.
type="submit" Bouton d'envoi des paramètres.
value Spécifiez la chaîne de caractères à afficher dans le contenu (champ de texte, bouton, etc.).

Ensuite, ajoutez le code suivant à DemoController.java.

DemoController.java


package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class DemoController {
	
	//C'est la même chose que la méthode hello créée la dernière fois. (Changer d'index car le nom de la méthode est couvert)
	@RequestMapping(value="/",method=RequestMethod.GET)
	public ModelAndView index() {
		ModelAndView mav=new ModelAndView();
		mav.setViewName("/index");
		return mav;
	}
	
	//C'est la méthode à ajouter cette fois.
	@GetMapping("/hello")
	public ModelAndView hello(@RequestParam String username,ModelAndView mav) {
		mav.addObject("username",username);
		mav.setViewName("/hello");
		return mav;
	}
}

Pour la fonction de ModelAndView, allez à l'article précédent!

@RequestParam Décrit au début de l'argumentation. En ajoutant cela, la valeur du paramètre de demande est automatiquement stockée dans la variable. De plus, il existe différentes manières d'écrire, je vais donc les présenter toutes ensemble. A titre d'exemple, le nom du paramètre envoyé est " username ".

  • @RequestParam String username
    C'est le style d'écriture utilisé cette fois. Le nom de la variable (en rouge) et le nom du paramètre que vous souhaitez recevoir doivent être identiques. Une erreur se produit si le même paramètre que le nom de la variable n'existe pas.

Exemple de description


@RequestParam String username //OK
@RequestParam String name //NG
  • @RequestParam("username") String username
    C'est la manière la plus sûre d'écrire. Du côté des annotations, spécifiez le nom du paramètre que vous souhaitez recevoir. Si vous spécifiez un nom qui n'existe pas, une erreur se produira. À ce stade, le nom de la variable peut être n'importe quel nom.

Exemple de description


@RequestParam("username") String username //OK
@RequestParam("username") String name //OK
@RequestParam("name") String username //NG
  • @RequestParam(value="username",required=false) String username
    Cela ne sort pas beaucoup. Vous pouvez choisir d'exiger ou non le nom du paramètre avec «valeur» et l'existence du paramètre avec «requis». La valeur par défaut est true.
    S'il est défini sur false, aucune erreur ne se produira même si le paramètre spécifié n'existe pas (bien que les paramètres ne puissent pas être passés, bien sûr ...). Là encore, le nom de la variable peut être n'importe quel nom.

Exemple de description


@RequestParam(value="username",required=false) String username //OK
@RequestParam(value="name",required=false) String name //OK mais ne peut pas être livré
@RequestParam(value="name",required=true) String name //NG

Créez ensuite un fichier HTML qui reçoit les paramètres. Créez un fichier HTML avec le nom «hello.html» dans le même dossier que «index.html» et réécrivez le contenu comme suit.

hello.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<span th:text="${username}"></span>, Bonjour le monde!
</body>
</html>
  • <html xmlns:th="http://www.thymeleaf.org">
    Cette description vous permet d'appeler des fonctions Thymeleaf avec des noms de balises commençant par th.
    Qu'est-ce que Thymeleaf? Pour [article précédent](https://qiita.com/hatopo/items/ecc16fdc757fc8cc8d55#%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81 % AB% E3% 81% A4% E3% 81% 84% E3% 81% A6) et Documents officiels!
  • ** th: text =" $ {nom du paramètre} " **
    Obtient les paramètres stockés dans ModelAndView et les affiche dans le contenu. Il est utilisé pour les balises «
    », «» et «

    ».

  • ** th: value =" $ {nom du paramètre} " **
    Identique à «th: text». Ceci est utilisé pour <input type =" text "> etc.

D'autres balises seront expliquées à chaque fois qu'elles apparaissent.


Maintenant, accédons à http: // localhost: 8080. Entrez un nom approprié et cliquez sur le bouton «Envoyer». Le nom que vous avez entré peut être affiché sur la page suivante! Ce qui précède est le passage des paramètres par @ RequestParam. L'image est la suivante. flow_param.png

Passons les paramètres (édition PathVariable)

Vient ensuite la méthode de transmission de paramètres qui n'est possible qu'avec la méthode GET. Avec cette méthode, vous pouvez obtenir la chaîne contenue dans l'URL telle quelle. (Par exemple, lorsque vous accédez à http: // localhost: 8080 / hello / xxx, vous pouvez obtenir xxx comme paramètre)

Réécrivez la méthode «hello» de «DemoController.java».

DemoController.java


@GetMapping("/hello/{username}")
public ModelAndView hello(@PathVariable String username,ModelAndView mav) {
	mav.addObject("username",username);
	mav.setViewName("/hello");
	return mav;
}

@GetMapping Je l'ai fait la dernière fois, mais le problème est l'argument. Entourez la partie que vous voulez obtenir de l'URL dans {}, et mettez le nom de l'appel avec @ PathVariable décrit plus loin.

@PathVariable Décrit au début de l'argumentation. Il y a plusieurs façons d'écrire ceci, mais c'est la même chose que @ RequestParam, donc je vais l'omettre.

De plus, plusieurs paramètres peuvent être acquis. Par exemple, si vous voulez obtenir hatopo et 24 lorsque vous accédez à http: // localhost: 8080 / hello / hatopo / 24, écrivez comme suit.

Exemple de description


@GetMapping("/hello/{username}/{age}")
public ModelAndView hello(@PathVariable String username,@PathVariable int age,ModelAndView mav) {
	//Le contenu est omis
	return mav;
}

Maintenant, accédons à http: // localhost: 8080 / hello / xxx. (Entrez une chaîne de caractères pour xxx) J'ai pu afficher les paramètres après / bonjour!

Pour ceux qui n'ont pas envie de passer des paramètres ...
Bien qu'il soit complètement bâclé, les paramètres peuvent être passés en écrivant un javascript qui attache la valeur du champ de texte à l'URL et effectue la transition de page. Réécrivez l'intérieur de «» de «index.html» comme suit.

index.html


<body>
Nom:<input type="text" id="name">
<input type="submit" value="Envoyer" onclick="send()">
<script>
function send(){
	var name = document.getElementById("name").value;
	if(name == "")name = "default_name";
	location.href = "http://localhost:8080/hello/" + name;
}
</script>
</body>

Vous pouvez afficher la valeur d'entrée en accédant à http: // localhost: 8080 /, en entrant le nom et en appuyant sur le bouton "Envoyer"!

Ce qui précède est le passage des paramètres. Continuons à remettre les objets.

Objets qui passent

Pour ceux qui ne connaissent pas les objets, il est normal de le comprendre comme une boîte (classe) avec des paramètres pour le moment.

Tout d'abord, créez une classe avec le nom «User» dans le même dossier que «DemoController» et ajoutez le code suivant.

User.java


package com.example.demo;

public class User {
	private String name;
	private int age;
}

Ensuite, ajoutez les méthodes appelées getter et setter dont java a besoin pour obtenir / définir les paramètres. Vous pouvez l'écrire manuellement, mais si vous voulez l'ajouter automatiquement, placez le curseur à un endroit approprié dans la classe User et cliquez sur source >> getter and setter generation. Cliquez sur «Sélectionner tout» >> «Générer». Ce n'est pas grave si tout le code ressemble à ceci:

User.java


package com.example.demo;

public class User {
	private String name;
	private int age;
	//↓ Code ajouté par génération automatique
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	//↑ Code ajouté par génération automatique
}
  • Si vous utilisez un plug-in appelé Lombok, vous n'avez pas besoin d'écrire ce code, mais cet article ne le couvre pas.

Réécrivez ensuite «index.html» comme suit.

index.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/hello" method="get" th:object="${user}">
Nom:<input type="text" name="name"><br>
âge:<input type="text" name="age"><br>
<input type="submit" value="Envoyer">
</form>
</body>
</html>
  • ** th: object =" $ {nom de l'objet} " **
    Les paramètres de la balise qui décrit cela peuvent être désignés collectivement par un nom d'objet. Dans cet exemple, nous mettons «nom» et «âge» dans une case nommée «utilisateur».

Réécrivons également la méthode hello de DemoController.java.

DemoController.java


@GetMapping("/hello")
public ModelAndView hello(@ModelAttribute User user,ModelAndView mav) {
	mav.addObject("user",user);
	mav.setViewName("/hello");
	return mav;
}

@ModelAttribute Décrit au début de l'argumentation. Stockez l'objet envoyé depuis le formulaire dans une variable. À ce stade, Spring effectuera les opérations suivantes dans les coulisses.

Traitement interne


User user = new User();
user.setName(name);
user.setAge(age);

Par conséquent, cela ne fonctionnera pas correctement si la variable de champ «name» n'est pas définie dans la classe «User» ou si la méthode «setAge» n'est pas définie.

Vous pouvez également écrire cette annotation dans une méthode, mais elle est utilisée très différemment, je l'omettrai donc dans cet article ...


Enfin, réécrivons hello.html comme suit.

hello.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div th:object="${user}">
<span th:text="*{name}"></span>Est
<span th:text="*{age}"></span>Je suis vieux!
</div>
</body>
</html>
  • ** th: text =" * {nom du paramètre} " **
    Abréviation de th: text =" $ {nom de l'objet.nom du paramètre} ".
    Dans la balise qui décrit th: object = {}, il peut être abrégé comme ci-dessus.

Maintenant, accédons à http: // localhost: 8080. Entrez votre nom et votre âge et appuyez sur le bouton "Envoyer" ...

J'ai pu afficher mon nom et mon âge!

la revue

--Passer les paramètres avec @ RequestParam --Obtenir les paramètres d'URL avec @ PathVariable --Passer des objets avec @ ModelAttribute

C'est tout pour cette fois. Je vous remercie pour votre travail acharné. A partir de la prochaine fois, je parlerai de fonctions plus sérieuses.

Recommended Posts