[JAVA] J'ai créé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 1 (édition API)

Ne serait-il pas cool que l'API puisse être fournie par un service Web?

Le motif principal est ce w Conditions préalables La communication de "api.localhost" est possible. Voir this ヾ (.> ﹏ <.) ノ

La préparation est un sous-domaine pour l'API.

spécification Bibliothèque requise.

Nom de la bibliothèque La description
SpringFramework 5.0 Je veux que tout le monde aime
Jersey JAX-RS:C'est l'une des implémentations de la spécification de communication HTTP de Java. Ajouter une fonction de communication à Java
Jackson Wrappers pour xml et json, conversion entre chaînes et classes

1. Faire un côté service

Méthode au contrôleur

Faire

APIPictureController.java




@RequestMapping(value="/api/picture", produces="application/json;charset=UTF-8")
@Consumes(MediaType.APPLICATION_JSON)
@RestController
public class APIPictureController {
	@Autowired
	PictureService pictureService;

	@POST
	@RequestMapping(value="/addPicture", method = RequestMethod.POST, headers = "X-SUBDOMEIN=api")
	public String addPicture( HttpServletRequest request, @RequestBody PictureMaster pictureMaster) {

		request.getHeaderNames();
		//Enregistrer une image
		Long ResultId = pictureService.addPicture(pictureMaster);
		
		PictureAddResponse response = new PictureAddResponse();
		
		response.setPictureId(ResultId.toString());
		response.setSuccessedIs(true);
		
		//Convertir en chaîne json à l'aide de Jackson
		ObjectMapper mapper = new ObjectMapper();
		String json = null;
		try {
			json = mapper.writeValueAsString(response);
		} catch (JsonProcessingException e) {
			//Bloc de capture généré automatiquement TODO
			e.printStackTrace();
			return "{\"result\":\"failure\"}";
		}
		
		//Renvoie une réponse.
		return json;
	}

Enregistrez les informations d'image envoyées en tant que réponse à l'aide de la classe de service que vous avez déjà créée.

Comment recevoir une demande

Le premier est de savoir comment recevoir une demande de traitement importante. Est l'annotation du contrôleur et les arguments de cette méthode.

@Consumes(MediaType.APPLICATION_JSON) Cette annotation déclare que "cette API accepte les demandes au format JSON". Et @RequestMapping(value="/api/picture", produces="application/json;charset=UTF-8") Avec cet attribut produit, cette API renvoie une réponse JSON. Je vais définir cela.

APIPictureController.java


public String addPicture( HttpServletRequest request, @RequestBody PictureMaster pictureMaster) {

Ensuite, avec cette @RequestBody, décidez sur quelle classe Json doit être défini. Bien sûr, si vous créez une classe qui ne correspond pas côté client qui sera créée ultérieurement, une erreur sera générée, donc Faisons une communication que le côté serveur et le côté client peuvent gérer correctement (* ^ - ^ *)

Faites le traitement

Le processus est appelé à partir de la classe de service conformément à la conception de Spring. Voir conteneur DI, par @Autowired

PictureServiceImpl.java


	/**
	 *Enregistrer une image(API)
	 */
	@Override
	public Long addPicture(PictureMaster pictureMaster) {
		//TODO talon de méthode généré automatiquement
		pictureMaster.setPictureData(Base64.getDecoder().decode(pictureMaster.getBase64string()));
		
		pRepository.saveAndFlush(pictureMaster);
		
		return pictureMaster.getPictureId();
	}

Comment retourner la réponse

Et le deuxième processus important consiste à renvoyer une réponse après avoir exécuté le processus.

Tout d'abord, nous avons défini les beans nécessaires à la réponse.

PictureAddResponse.java


/**
 *Réponse de communication API
 * @author nozawa
 *
 */
@Data
@ToString
public class PictureAddResponse {

	private String pictureId;
	private Boolean SuccessedIs;
}

Cette classe, utilisant la bibliothèque Jackson Converti en chaîne de caractères Json et renvoyé.

APIPictureController.java



		PictureAddResponse response = new PictureAddResponse();
		
		response.setPictureId(ResultId.toString());
		response.setSuccessedIs(true);
		
		//Convertir en chaîne json à l'aide de Jackson
		ObjectMapper mapper = new ObjectMapper();
		String json = null;
		try {
			json = mapper.writeValueAsString(response);
		} catch (JsonProcessingException e) {
			//Bloc de capture généré automatiquement TODO
			e.printStackTrace();
			return "{\"result\":\"failure\"}";
		}
		
		//Renvoie une réponse.
		return json;

Convertissez à l'aide d'une classe pour Json appelée ** ObjectMapper **. Mettez simplement la classe comme ** mapper.writeValueAsString (response); **. C'est facile.:. ゜ ヽ (´∀`.) Non.:. ゜

Et retournons la chaîne.

Le côté API est terminé

Vous avez maintenant fourni la fonctionnalité en tant qu'API. Ensuite, faisons cette communication en tant que client et utilisons cette fonction. Suite

Recommended Posts

J'ai créé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 1 (édition API)
J'ai créé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 2 (édition client)
J'ai créé un domaine api avec Spring Framework. Partie 2
J'ai créé un domaine api avec Spring Framework. Partie 1
J'ai créé un formulaire de recherche simple avec Spring Boot + GitHub Search API.
"Professeur, je souhaite implémenter une fonction de connexion au printemps" ① Hello World
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
J'ai essayé de créer une fonction de connexion avec Java
Je souhaite définir une fonction dans la console Rails
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
Je souhaite implémenter une fonction d'édition des informations produit ~ part1 ~
J'ai créé un plug-in qui exécute jextract avec des tâches Gradle
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
Je veux créer une fonction avec kotlin et java!
J'ai recherché un framework web avec Gem en Ruby
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Les rails étaient difficiles, alors j'ai fait quelque chose comme un contrôleur Spring Framework pour faire une pause
Je souhaite ajouter une fonction de navigation avec ruby on rails
J'ai créé une interface graphique avec Swing
02. J'ai créé une API pour me connecter de Spring Boot à MySQL (My Batis)
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 1)
J'ai fait une simple fonction de recommandation.
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 5):
Je voulais faciliter la programmation JavaFX avec Spring Framework
J'ai essayé de créer une fonction de groupe (babillard) avec Rails
Je veux afficher des images avec REST Controller de Java et Spring!
Je souhaite sélectionner plusieurs éléments avec une disposition personnalisée dans la boîte de dialogue
J'ai essayé de créer une API Web qui se connecte à DB avec Quarkus
Je voulais mettre en place un diaporama de manière à la mode avec slick.
Je souhaite afficher un PDF chinois (coréen) avec des rapports fins
Je veux ForEach un tableau avec une expression Lambda en Java
[LINE BOT] J'ai créé un Ramen BOT avec Java (Maven) + Heroku + Spring Boot (1)
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 2): Changer de modèle
J'ai fait une mort risquée avec Ruby
J'ai créé une application Janken avec kotlin
J'ai créé une application Janken avec Android
Faisons une application TODO avec Java 2 Je veux créer un modèle avec Spring Initializr et créer Hello world
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part3 ~ Practice ~
03. J'ai envoyé une demande de Spring Boot à l'API de recherche de code postal
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
[Go To Travel] J'ai cherché un plan avec une carte quo
Introduction de l'expert n ° 15 pour créer une API de tableau d'affichage avec certification et autorisation dans Rails 6
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports Extra (édition Variables)
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports Extra Edition (édition d'image)
SpringSecurity J'étais accro à essayer de me connecter avec un mot de passe haché (résolu)
J'ai fait un exemple de la façon d'écrire un délégué dans Swift UI 2.0 à l'aide de MapKit
J'ai créé un programme de jugement des nombres premiers en Java
04. J'ai fait un frontal avec SpringBoot + Thymeleaf
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
J'ai créé un conteneur Docker pour exécuter Maven
J'ai créé une bibliothèque d'extension Ruby en C
Comment ajouter un chemin de classe dans Spring Boot
[Rails] J'ai créé une fonction de brouillon en utilisant enum
J'ai essayé de lier JavaFX et Spring Framework.