salut. 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.
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
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! !!
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.
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.
@ Controller
à la classe DemoApplicationInutile de dire que vous pouvez faire de la classe un contrôleur en ajoutant l'annotation @ Controller
.
@ 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!
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é.
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() {
}
}
@ 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)
@ 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
@ 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"
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!
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.
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.
cd ~/Users/xxx/workspace/demo
./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.
En cas de succès, vous verrez BUILD SUCCESS
comme indiqué ci-dessous.
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.
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