[JAVA] Résumé de ce que j'ai appris sur Spring Boot

introduction

Je garderai un mémorandum de ce que j'ai appris lorsque j'ai touché Spring Boot pour la première fois de novembre à décembre l'année dernière.

Public cible

Pour ceux qui veulent toucher Spring Boot à partir de maintenant. Je pense qu'il sera connu de ceux qui l'ont utilisé.

Ce que j'ai fait

Une API publique externe simple qui renvoie simplement des informations basées sur la valeur d'entrée reçue.

Diverses choses utilisées

Configuration de l'application implémentée cette fois

クラス構成.png

Aperçu des différentes classes

nom de la classe Aperçu
Classe RestController Une classe qui implémente la partie interface de l'API.
Classe de formulaire Une classe qui contient des informations sur le contenu des demandes des clients et la réponse renvoyée.
Classe RestControllerAdvice RestController Une classe qui implémente un traitement commun.
Classe de service Une classe qui implémente la logique métier.
Classe de référentiel Une classe qui effectue un accès à la base de données.
Classe d'entité Une classe qui contient les données acquises à partir du DB et les données à entrer dans le DB.

Descriptions et échantillons de différentes classes

Classe principale

Ajoutez @ SpringBootApplication.

Annotation Aperçu
@EnableAutoConfiguration Le paramètre automatique de Spring Boot est activé et divers paramètres sont automatiquement définis en fonction des dépendances définies.
@ComponentScan Une analyse des composants est effectuée et dans l'emballage à analyser@ComponentLa classe avec est automatiquement chargée et gérée par le conteneur DI. La classe qui a scanné les composants@AutowiredPeut être défini sur une variable par. * Reportez-vous à l'exemple de code ci-dessous.
@Configuration En l'attribuant, les beans peuvent être enregistrés individuellement et les classes de paramètres peuvent être lues.

Diverses classes sont lues et définies par @ ComponentScan et @ EnableAutoConfiguration, et l'application est exécutée.

SampleApplication.java


@SpringBootApplication
public class SampleApplication {

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

    @Override
    protected SpringApplicationBuilder configure (final SpringApplicationBuilder builder) {
        return builder.sources (SampleApplication .class);
    }
}

Classe RestController

SampleController.java


/**
 *Contrôleur d'échantillon.
 */
@RestController
@Validated
public class SampleController {

    @Autowired
    private SampleService service; //Associez la classe Service à utiliser.

    @PostMapping (path = "/sample", //Spécifiez le chemin à mapper vers la méthode.
        consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, //Spécifiez le type de support de la demande à recevoir.
        produces = MediaType.APPLICATION_JSON_UTF8_VALUE) //Spécifiez le MediaType de la réponse à renvoyer.
    @CrossOrigin
    public ResponseEntity<SampleForm> sampleMethod (
        @RequestHeader (value = "sample_key") //Définissez la valeur clé de la valeur reçue de l'en-tête.
        @NotEmpty (message = "sample_key is empty.") //Si vous souhaitez examiner sans utiliser Form, définissez le contrôle ici.
        @Valid String sampleKey, //Définissez une variable qui stocke la valeur reçue de l'en-tête.
        @RequestBody
        @Valid SampleForm form //Définissez la classe Form qui stocke la valeur reçue du corps et la variable qui la stocke.
    ) {
        return new ResponseEntity<> (service.sampleMethod (form.getSampleUserId), HttpStatus.OK);
    }
}

Classe de formulaire

SampleForm.java


@Data
@ToString
public class SampleForm implements Serializable {

    private static final long serialVersionUID = 1L;

    @JsonProperty ("sample_user_id") //Définissez la valeur de clé sur JSON.
    @NotEmpty (message = "sampleUserId is empty") //Définissez le contenu de l'examen.
    private String sampleUserId;
    
}

Classe RestControllerAdvice

SampleExceptionHandler.java


@RestControllerAdvice
public class SampleExceptionHandler {

    @ExceptionHandler (Exception.class) //Définissez l'exception à capturer.
    @ResponseStatus (HttpStatus.INTERNAL_SERVER_ERROR) //Définissez le code d'état HTTP de la réponse renvoyée lorsque l'exception ci-dessus se produit.
    protected ErrorForm handleInternalServerError (Exception e) {
        logger.error (e);
        return new ErrorForm ("Internal Server Error");
    }

    @RequiredArgsConstructor
    private class ErrorForm implements Serializable {
        private static final long serialVersionUID = 1L;
        private final String message;
    }
}

Classe de service

SampleService.java


@Service
@Transactional //Annule automatiquement lorsqu'une exception se produit.
public class SampleService {

    @Autowired
    private SampleUserRepository sampleUserRepository; //Associez la classe Repository à utiliser.

    public SampleForm returnSampleForm (String sampleUserId) {
        return convertToSampleForm(sampleUserRepository.findBySampleUserId(sampleUserId));
    }
}

Classe de référentiel

SampleUserRepository.java


@Repository
public interface SampleUserRepository extends JpaRepository<SampleUser, String> { //Définissez la table de destination d'accès et le type de clé primaire.
    SampleUser findBySampleUserId (String sampleUserId); //Définissez les noms de méthode et les arguments selon les conventions de dénomination.
}

Classe d'entité

SampleUser.java


@Entity
@Table (name = "sample_user") //Définissez le nom de la table à lier.
@Data
public class SampleUser implements Serializable {

    private static final long serialVersionUID = 1L;

    /**Exemple d'ID utilisateur*/
    @Id //Affecté à l'élément de la clé primaire.
    @GeneratedValue (strategy = GenerationType.IDENTITY) //Si vous souhaitez une numérotation automatique, définissez la méthode de numérotation.
    private String sampleUserId;

    /**Exemple de nom d'utilisateur*/
    private String sampleUserName;
}

Site de référence

Recommended Posts

Résumé de ce que j'ai appris sur Spring Boot
Résumé de ce que j'ai appris dans Spring Batch
Ce que j'ai appris sur Kotlin
Ce que j'ai appris
À propos de DI of Spring ①
Ce que j'ai appris ② ~ Mock ~
À propos de DI of Spring ②
Ce que j'ai appris ① ~ DJUnit ~
Résumé du document Spring Boot 2.2
Exécution asynchrone des requêtes examinée dans Spring Boot 1.5.9
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
[Spring boot] J'ai pensé au code testable par DI
J'écrirai quand même ce que j'ai appris sur docker (deuxième)
J'écrirai de toute façon ce que j'ai appris sur docker (en premier)
Ce que j'ai recherché sur Java 8
Ce que j'ai recherché sur Java 6
Ce que vous avez appris sur le hachage
Ce que j'ai recherché sur Java 9
Ce que vous avez appris sur les symboles
Ce que j'ai recherché sur Java 7
Ce que j'ai recherché sur Java 5
À propos de la fonction de Spring Boot en raison de différentes versions
Ce que j'ai corrigé lors de la mise à jour vers Spring Boot 1.5.12 ・ Ce à quoi j'étais accro
Ce que j'ai appris en étudiant les rails
Spring Framework 5.0 Résumé des principaux changements
Sortie de message (Spring boot)
A propos de la liaison de l'annotation Spring AOP
Qu'est-ce que @Autowired dans Spring Boot?
Ce que j'ai appris avec Java Gold
J'ai essayé GraphQL avec Spring Boot
J'ai essayé Flyway avec Spring Boot
Ce que j'ai appris avec Java Silver
Ce que j'ai recherché sur l'apprentissage Java
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
Voici un résumé de ce que j'ai été curieux à propos d'Enum récemment
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0
Je veux contrôler le message d'erreur par défaut de Spring Boot
Qu'est-ce qu'un fichier .original Spring Boot?
[Spring Boot] J'ai étudié comment implémenter le post-traitement de la demande reçue.
Qu'est-ce qu'un test? ・ À propos de l'importance d'un test
Prenez ce que vous avez appris sur la réflexion Java
À propos du printemps ③
À propos de l'affichage initial de Spring Framework
Résumé de la participation au JJUG CCC 2019 Spring
Mémorandum WebMvcConfigurer de Spring Boot 2.0 (printemps 5)
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
J'étais accro au @Transactional de Spring
Résumé des paramètres initiaux pour Spring Boot, Doma2, Gradle
Ce que j'ai appris du calcul monétaire Java
Résumé des points qui m'inquiétaient lors de la migration de Java vers Kotlin
J'ai essayé de cloner une application Web pleine de bugs avec Spring Boot
[Note personnelle] J'ai appris à la légère sur les modificateurs
À propos du guide de démarrage officiel de Spring Framework
[FCM] Implémentation de la transmission de messages en utilisant FCM + Spring boot
[Rails] J'ai appris les types de types de données de base de données!
L'histoire de la montée de la série Spring Boot 1.5 à la série 2.1