[Java] Hello World avec Java 14 x Spring Boot 2.3 x JUnit 5 ~

introduction

salutL'environnement STS a été construit sur mac. Cette fois, je suis allé à "Créer un fichier HelloWorld et un fichier de code de test HelloWorld, enregistrez-le dans un bocal, et exécutez-le sur mac". Comme la dernière fois, j'ai procédé en faisant référence à Introduction to Spring. C'est une procédure simple, mais probablement à cause de la version, j'ai écrit un article parce que j'étais inopinément obligé de l'exécuter avec JUnit ou d'en faire un jar. Veuillez aller au-delà de mon cadavre.

Environnement d'utilisation et version

Créer un modèle de projet avec Spring Initializr

Tout d'abord, créez un modèle de projet avec Spring Initializr. Spring Initializr est un service Web fourni par Spring Boot. Vérifiez simplement les informations nécessaires et vous pouvez télécharger le répertoire qui sert de base à la création d'un projet Spring Boot au format zip. De plus, DemoApplication.java, qui a un modèle pour la méthode principale, et DemoApplicationTests.java, qui a un modèle pour le code de test, sont placés à l'avance dans le répertoire approprié.

En d'autres termes, il suffit de le télécharger et 80% de cette création sera terminée lol

スクリーンショット 2020-05-20 22.49.42.png

Depuis que nous avons construit l'environnement avec Maven la dernière fois, Project sélectionnera Maven. De plus, sélectionnez la langue, la version Spring Boot, la version Java, etc. qui vous convient, et cliquez sur le bouton GÉNÉRER pour démarrer le téléchargement de demo.zip.

Lorsque vous décompressez demo.zip, le projet Maven suivant est déjà créé. Hou la la! N'est-ce pas vraiment facile! !!

スクリーンショット 2020-05-26 0.47.04.png

Il est facile de procéder si vous déplacez le fichier de démonstration décompressé dans le répertoire de l'espace de travail créé lors de la création de l'environnement. Ouvrez STS, allez dans Fichier> Importer> Projets Maven existants et sélectionnez le dossier de démonstration que vous venez de décompresser pour l'importer.

La compilation s'exécutera automatiquement, alors attendez un moment jusqu'à ce que l'Explorateur de packages affiche le package comme indiqué dans l'image ci-dessous. Si ce qui suit ne se produit pas automatiquement, appuyez sur Projet> Nettoyer dans la barre de menus.

スクリーンショット 2020-05-26 1.14.17.png

Modification de DemoApplication.java

Le contenu de DemoApplication.java que vous venez de télécharger devrait ressembler à ceci:


package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

Spring est un framework pour les modèles MVC. Étant donné que le projet HelloWorld nécessite une implémentation minimale, je voudrais implémenter uniquement la partie Controller, qui reçoit la requête du client et renvoie la réponse [^ 1].

[^ 1]: Je n'entrerai pas dans les détails de Spring MVC, mais pour être précis, le servlet du contrôleur avant devant le contrôleur reçoit la requête et renvoie la réponse. Nous laisserons cela au framework, donc les développeurs n'implémenteront que le contrôleur.

■ Ajoutez @ Controller à la classe DemoApplication

Inutile de dire que vous pouvez faire de la classe un contrôleur en ajoutant l'annotation @ Controller.

■ Créez une méthode helloWorld () avec @ RequestMapping et @ ResponseBody

En ajoutant deux annotations, @ RequestMapping et @ ResponseBody, la valeur de retour peut être utilisée comme contenu de la réponse. Référence: Diverses valeurs de retour dans le contrôleur Spring MVC


package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@SpringBootApplication
@Controller
public class DemoApplication {

	@RequestMapping("/")
	@ResponseBody
	String helloWorld() {
		return "Hello World!";
	}
	
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

Enregistrez-le, cliquez avec le bouton droit sur DemoApplication> Exécuter en tant que> Application Java et exécutez la méthode principale et vous devriez pouvoir halo à http: // localhost: 8080! Tu l'as fait!

スクリーンショット 2020-05-26 2.12.34.png

Même si vous écrivez autre chose que ce qui précède, si vous changez l'annotation du contrôleur de @ Controller à @ RestController, l'annotation helloWorld () fonctionnera uniquement avec @ RequestMapping.

Cependant, si vous faites une erreur dans la combinaison d'annotations, une erreur se produira (je l'ai fait). Apparemment, cet écran apparaît si la requête HTTP n'est pas reçue du côté de l'application, et il semble que le même écran sera affiché même si DemoApplication.java est exécuté jusqu'à ce qu'il soit téléchargé.

スクリーンショット 2020-05-26 1.38.40.png

Modification de DemoApplicationTests.java

Nous éditerons également le code de test en fonction de l'implémentation de DemoApplication.java. Vous trouverez ci-dessous le code de test Manma téléchargé. Je vais modifier cela.


package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DemoApplicationTests {

	@Test
	void contextLoads() {
	}

}

■ Accordez @ SpringBootTest au lieu de @ SpringApplicationConfigration et @ WebIntegrationTest

Les deux premières annotations sont obsolètes depuis Spring Boot 1.4 et devraient être remplacées par @ SpringBootTest. @ SpringBootTest reconnaît la classe avec @ SpringBootApplication comme classe de configuration de test. ](Https://qiita.com/BooookStore/items/14c7bd559878991cf112)

■ Utilisez @ ExtendWith (SpringExtension.class) au lieu de@ RunWith (SpringRunner.class)

SpringRunner est de JUnit4, donc quand je l'ai utilisé avec JUnit5, la construction n'a pas fonctionné lorsque j'ai créé le jar après cela ... Dans JUnit5, l'annotation @ RunWith elle-même a été remplacée par @ ExtendWith, donc je l'ai modifiée ici. JUnit5 @RunWith

■ Obtenez le numéro de port avec @ LocalServerPort

Dans Spring Boot 1.3 ou version antérieure, le numéro de port était acquis par @ Value (" $ {local.server.port} "), mais depuis la version 1.4, @ LocalServerPort a été ajouté comme raccourci. Dans la version 2.3, lorsque j'ai essayé d'obtenir le numéro de port avec «@ Value», l'erreur suivante s'est produite et le test n'a pas pu être exécuté. ..

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.example.demo.DemoApplicationTests': Unsatisfied dependency expressed through field 'port';
nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'int'; 
nested exception is java.lang.NumberFormatException: For input string: "${local.server.port"

■ La méthode assertThat utilise org.hamcrest.MatcherAssert.assertThat au lieu de org.junit.Assert.assertThat

Affirmation de JUnitCela dit Obsolète et donne l'annotation @SuppressWarnings (« obsolète ») pour autoriser la version obsolète. Mais je n'ai pas pu bien construire le pot ... (peut-être à cause de quelque chose d'autre que ce qui précède) Au lieu de cela, j'ai utilisé l'affirmation d'Hamcrest

Le code de test final ressemble à ceci:


package com.example.demo;

import static org.hamcrest.CoreMatchers.is;

import static org.hamcrest.MatcherAssert.assertThat;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)
public class DemoApplicationTests {

	TestRestTemplate restTemplate = new TestRestTemplate();
	
	@LocalServerPort
	int port;
	
	@Test
	public void testHello() {
		assertThat(restTemplate.getForObject("http://localhost:" + port, String.class), is("Hello World!"));
	}

}

Vous pouvez exécuter le code de test en cliquant avec le bouton droit sur DemoApplicationTests.java> Exécuter en tant que> JUnit Test. Si vous voyez ce qui suit dans le panneau JUnit, le test est réussi!

スクリーンショット 2020-05-26 3.26.19.png

Essayez de changer la partie "Hello World!" Du code de test ci-dessus ou de DemoApplication.java en autre chose et voyez si le test échoue.

スクリーンショット 2020-05-26 3.28.54.png

Créer un fichier jar exécutable

Avec les étapes jusqu'à présent, le projet Spring Hello World est déjà terminé. Cependant, quand j'essaye réellement d'en faire un jar, je remarque qu'il ne compile ni ne compile, donc c'est bien de le faire!

Je vais vous expliquer la procédure pour créer un pot.

① Passez du terminal mac au répertoire de démonstration sous l'espace de travail

cd ~/Users/xxx/workspace/demo

② Exécutez la commande Maven pour créer un fichier jar exécutable

./mvnw clean package

Même si Hello World et les tests réussissent sur STS, vous pouvez obtenir une erreur ici (vous-même) J'ai découvert que @ RunWith ne peut pas être utilisé ici.

スクリーンショット 2020-05-26 3.40.11.png

En cas de succès, vous verrez BUILD SUCCESS comme indiqué ci-dessous.

スクリーンショット 2020-05-26 3.46.31.png

③ Exécuter le pot

Si la construction réussit, vous devriez avoir "demo-0.0.1-SNAPSHOT.jar" sous demo / target. Exécutez celui qui n'a pas d'original à la fin.

java -jar /Users/xxx/workspace/demo/target/demo-0.0.1-SNAPSHOT.jar

Si Spring démarre comme ci-dessous, il réussira! Vous pouvez voir Hello World! De la même manière sur http: // localhost: 8080.

スクリーンショット 2020-05-26 3.52.32.png

en conclusion

Comme mentionné au début, je l'ai fait en lisant Spring Thorough Introduction, mais lors de la création de Hello World, les mêmes Java et IDE Mais j'ai été surpris que ce soit si différent simplement parce que la version était différente ... J'ai compris la raison pour laquelle la version est importante ... Maintenant que j'ai créé le modèle, j'aimerais créer facilement une application et écrire du code de test la prochaine fois!

Merci pour la lecture! S'il y a quelque chose qui peut être différent ici, faites-le moi savoir comme dans l'exemple ...!

Recommended Posts

[Java] Hello World avec Java 14 x Spring Boot 2.3 x JUnit 5 ~
Hello World avec Spring Boot
Hello World avec Spring Boot
Jusqu'à "Hello World" avec Spring Boot
(Intellij) Hello World avec Spring Boot
Hello World avec Eclipse + Spring Boot + Maven
(IntelliJ + gradle) Hello World avec Spring Boot
Comparez Hello, world! Avec Spring Boot avec Java, Kotlin et Groovy
Hello World (API REST) avec Apache Camel + Spring Boot 2
Hello World (application console) avec Apache Camel + Spring Boot 2
Spring Boot Hello World dans Eclipse
[Java] Intégration LINE avec Spring Boot
Java, bonjour le monde!
Java Hello World
Bonjour tout le monde avec le moteur de modèle Java Thymeleaf
[Entraine toi! ] Affichez Hello World avec Spring Boot
Comment Spring Security fonctionne avec Hello World
Utiliser le cache avec EhCashe 2.x avec Spring Boot
"Hello World" en Java
Hello World à une vitesse explosive avec Spring Initializr! !! !!
Développement d'applications Web Spring Boot2 avec création de Visual Studio Code Hello World
Hello World en Java
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.
Essayez d'afficher Hello World avec Spring + Gradle
Hello World avec Micronaut
Procédure de construction de LINE Bot x Java (Spring Boot)
Télécharger avec Spring Boot
[Java] [Spring Boot] Spécifier le profil d'exécution --Spring Boot à partir de NetBeans
[JUnit 5] Ecrivez un test de validation avec Spring Boot! [Test de paramétrage]
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant
Comparaison Hello World entre Spark Framework et Spring Boot
Générer un code à barres avec Spring Boot
Configuration Java avec Spring MVC
Implémenter GraphQL avec Spring Boot
Démarrez avec Spring Boot
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Bonjour tout le monde avec VS Code!
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
java bonjour le monde, compilez, exécutez
Application Java CICS-Run - (4) Application Spring Boot
Utilisation de Mapper avec Java (Spring)
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Les débutants en Java lisent Hello World
[Java] [Spring] Spring Boot 1.4-> 1.2 Note de rétrogradation
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Hello World avec SpringBoot / Gradle
Bonjour tout le monde! Avec Asakusa Framework!
[Java / Kotlin] Traitement d'échappement (désinfection) pour HTML5 avec unbescape [Spring Boot]
[Java] Un type d'alphabet interdit Avec reliure Bonjour tout le monde! [Reliure]
Gérez l'API de date et d'heure Java 8 avec Thymeleaf avec Spring Boot
Créez une application Web Hello World avec Spring Framework + Jetty
Développement piloté par domaine avec Java et Spring Boot-Layer et division de modules
[Java] Exemple de projet de développement d'applications Web avec Spring Boot
Paramètres du chemin de contexte Spring Boot 2.x