[JAVA] [API] J'ai essayé d'utiliser l'API de recherche par code postal

Essayez de créer une application à l'aide de l'API

Contexte

table des matières

0. Contrôle environnemental

1. Vérifiez l'API

2. Créez un projet

Veuillez vous référer à un autre article pour plus de détails. Créer un projet Spring Boot pour Gradle

3. Implémentation backend

build.gradle


//Omission
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	compile("com.fasterxml.jackson.core:jackson-databind")
}


FrontController.java


@Controller
public class FrontController {

	@Autowired
	private FrontService frontService;

    @RequestMapping({ "/", "/index" })
    public String index() {
    	return "index";
    }
	@ResponseBody
    @RequestMapping(value = "/getAddress" ,method = RequestMethod.POST, produces="application/json;charset=UTF-8")
    public String getAddress(@RequestBody(required = false) AddressForm addressForm) {
		return frontService.getAddress(addressForm.getZipcode());
    }
}

FrontService.java


public interface FrontService {
	public String getAddress(String zipCode);
}

FrontServiceImpl.java


@Service
public class FrontServiceImpl implements FrontService {

    /**URL de demande d'API de recherche par code postal*/
    private static final String URL = "https://zip-cloud.appspot.com/api/search?zipcode={zipcode}";

	@Override
	public String getAddress(String zipCode) {
		String zipCodeJson = restTemplate.getForObject(URL, String.class, zipCode);
		return zipCodeJson;
	}
}

--classe de formulaire

AddressForm.java


@Data
public class AddressForm {

	/**Code postal*/
	String zipcode;
}

4. Mise en œuvre frontale

index.html


<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>address</title>
		<script type="text/javascript" th:src="@{/jquery/jquery-3.3.1.js}"></script>
		<script th:src="@{/js/index.js}"></script>
	</head>
	<body>
		<form name="getAddress">
			<input id="zipcode" type="text">
			<button type="button" id="getAddressBtn">Obtenez une adresse</button>
			<div id="dispAddress"></div>
		</form>
	</body>
</html>

index.js


$(function() {
	$('#getAddressBtn').on('click', function() {
		var params = {
				"zipcode" : $('#zipcode').val()
		};
		$.ajax({
			url : 'getAddress',
			type: 'POST',
			contentType: "application/json",
	        data: JSON.stringify(params),
			dataType : 'json',
			async: false,
			success: function (data) {
				$("#dispAddress").empty();
			    var dispAddress = document.getElementById("dispAddress");
				var table = document.createElement("table");
				table.setAttribute("border","2");
				table.setAttribute("cellpadding","15");
				table.setAttribute("style","margin :15px");

			    $(data.results).each(function(index, result){
					table.appendChild(createRow("Code postal",result.zipcode));
					table.appendChild(createRow("Code préfecture",result.prefcode));
					table.appendChild(createRow("Nom des préfectures",result.address1));
					table.appendChild(createRow("Nom de Ville",result.address2));
					table.appendChild(createRow("Nom de la zone de la ville",result.address3));
					table.appendChild(createRow("Nom de la préfecture Kana",result.kana1));
					table.appendChild(createRow("Nom municipal Kana",result.kana2));
					table.appendChild(createRow("Nom de la localité Kana",result.kana3));
			    });
				dispAddress.appendChild(table);
			}
		});
	});
});

function createRow(header , value){
	var tr = document.createElement("tr");
	var th = document.createElement("th");
	th.append(header);
	var td = document.createElement("td");
	td.append(value);
	tr.appendChild(th);
	tr.appendChild(td);
	return tr;
}

5. Contrôle de fonctionnement

--Accédez à "localhost: 8080" avec un navigateur ブラウザ起動.png

--Entrez "100-0001" (code postal du palais impérial) et appuyez sur le bouton d'acquisition d'adresse ブラウザ起動2.png

6. Bonus

___ Comment convertir le format Json en classe DTO et recevoir ___

FrontController.java


@Controller
public class FrontController {

	@Autowired
	private FrontService frontService;

    @RequestMapping({ "/", "/index" })
    public String index() {
    	return "index";
    }
	@ResponseBody
    @RequestMapping(value = "/getAddress" ,method = RequestMethod.POST, produces="application/json;charset=UTF-8")
    //Changer la valeur de retour de String en ZipcodeDto
    public ZipcodeDto getAddress(@RequestBody(required = false) AddressForm addressForm) {
		return frontService.getAddress(addressForm.getZipcode());
    }
}

--Classe de service (correction)

FrontService.java


public interface FrontService {
    //Changer la valeur de retour de String en ZipcodeDto
	public ZipcodeDto getAddress(String zipCode); 
}

--Classe DTO (supplémentaire)

ZipcodeDto.java


@Data
public class ZipcodeDto {
    /**statut*/
    int status;

    /**message*/
    String message;

    /**Liste d'informations sur les codes postaux*/
    List<ZipcodeResultDto> results = new ArrayList<>();
}

--Classe DTO (supplémentaire)

ZipcodeResultDto.java


@Data
public class ZipcodeResultDto {

	/**Code postal*/
    String zipcode;

    /**Code préfecture*/
    String prefcode;

    /**Nom des préfectures*/
    String address1;

    /**Nom de Ville*/
    String address2;

    /**Nom de la zone de la ville*/
    String address3;

    /**Nom de la préfecture Kana*/
    String kana1;

    /**Nom municipal Kana*/
    String kana2;

    /**Nom de la localité Kana*/
    String kana3;
}

FrontServiceImpl.java


@Service
public class FrontServiceImpl implements FrontService {
     //ObjectMapper ajouté
	@Autowired
	ObjectMapper objectMapper;

     //Changer les paramètres d'URL en expressions régulières
    private static final String URL = "https://zip-cloud.appspot.com/api/search?zipcode=%s";

	@Override
	public ZipcodeDto getAddress(String zipCode) {
		ZipcodeDto zipcodeDto = null;;
		try {
            //Spécifiez l'URL et la classe de réception dans ObjectMapper
			java.net.URL url = new java.net.URL(String.format(URL,zipCode));
			zipcodeDto = objectMapper.readValue(url, ZipcodeDto.class);
		} catch (Exception e) {
			e.getStackTrace();
		}
		return zipcodeDto;
	}
}

FrontServiceImpl.java


@Service
public class FrontServiceImpl implements FrontService {

     //Ajout de restTemplate
	RestTemplate restTemplate = new RestTemplate();

    private static final String URL = "https://zip-cloud.appspot.com/api/search?zipcode={zipCode}";

	@Override
	public ZipcodeDto getAddress(String zipCode) {
		ZipcodeDto zipcodeDto = null;;
		try {

           //Ajout de MappingJackson2HttpMessageConverter à messageConverter de reatTemplate
			MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
		    List<MediaType> supportedMediaTypes = new ArrayList<>(messageConverter.getSupportedMediaTypes());
		    supportedMediaTypes.add(MediaType.TEXT_PLAIN);
		    messageConverter.setSupportedMediaTypes(supportedMediaTypes);
		    restTemplate.setMessageConverters(Collections.singletonList(messageConverter));
			zipcodeDto = restTemplate.getForObject(URL, ZipcodeDto.class, zipCode);
		} catch (Exception e) {
			e.getStackTrace();
		}
		return zipcodeDto;
	}
}

7. Résumé

Recommended Posts

[API] J'ai essayé d'utiliser l'API de recherche par code postal
03. J'ai envoyé une demande de Spring Boot à l'API de recherche de code postal
J'ai essayé d'utiliser l'API Java8 Stream
Essayez d'utiliser l'API de recherche de code postal avec Spring Boot
Code utilisé pour connecter Rails 3 à PostgreSQL 10
[API] J'ai essayé d'utiliser l'API de recherche par code postal
J'ai essayé d'utiliser l'API Elasticsearch en Java
J'ai essayé de résumer l'API Stream
J'ai essayé d'utiliser Gson
J'ai essayé d'utiliser TestNG
J'ai essayé d'utiliser Galasa
J'ai essayé d'utiliser le profileur d'IntelliJ IDEA
Mode API Rails J'ai essayé d'implémenter la fonction de recherche multiple par mot-clé à l'aide de tableaux et d'un traitement itératif.
J'ai essayé d'utiliser la fonction Server Push de Servlet 4.0
J'ai essayé d'utiliser la boîte à outils de migration pour les fichiers binaires d'application
[Java] J'ai essayé de mettre en œuvre la recherche de produits de l'API Yahoo
J'ai essayé d'utiliser azure cloud-init
J'ai essayé d'utiliser Apache Wicket
J'ai essayé d'utiliser Java REPL
J'ai essayé l'analyse du code source
J'ai essayé le problème FizzBuzz
J'ai essayé d'utiliser le référentiel GitHub comme serveur de bibliothèque
J'ai essayé de construire l'environnement petit à petit en utilisant docker
J'ai essayé d'utiliser la bibliothèque CameraX avec Android Java Fragment
J'ai essayé d'utiliser anakia + Jing maintenant
J'ai essayé quelque chose qui s'appelle la recherche récursive
J'ai essayé d'utiliser Spring + Mybatis + DbUnit
J'ai essayé d'utiliser JOOQ avec Gradle
J'ai essayé d'expliquer la méthode
J'ai essayé le framework Java "Quarkus"
[Rails] J'ai essayé de supprimer l'application
J'ai essayé d'utiliser JWT en Java
[Android] J'ai essayé d'utiliser la disposition du coordinateur.
J'ai essayé d'utiliser le conteneur Pari gp
J'ai essayé d'utiliser WebAssembly Stadio (version 2018/4/17)
J'ai essayé d'utiliser le mémo Java LocalDate
J'ai essayé d'utiliser Google HttpClient de Java
[Metal] J'ai essayé de comprendre le flux jusqu'au rendu avec Metal
J'ai essayé d'utiliser la fonction de cache d'Application Container Cloud Service
Exemple de code pour appeler l'API Yahoo! Local Search en Java
J'ai essayé d'afficher le calendrier sur la console Eclipse en utilisant Java.
J'ai essayé d'utiliser Realm avec Swift UI
J'ai essayé de migrer le traitement vers VS Code
J'ai essayé d'utiliser l'outil de diagnostic Java Arthas
J'ai essayé d'utiliser UICollectionViewListCell ajouté à partir de Xcode12.
Une histoire à laquelle j'étais accro lors du test de l'API à l'aide de MockMVC
Essayez d'utiliser l'API Stream en Java
J'ai essayé d'utiliser Scalar DL avec Docker
J'ai essayé le nouveau yuan à Java
J'ai essayé de résoudre la recherche binaire d'AOJ
J'ai essayé d'utiliser OnlineConverter avec SpringBoot + JODConverter
C'est nouveau, mais j'ai essayé d'utiliser Groonga
J'ai essayé d'implémenter le modèle Iterator
J'ai essayé d'exécuter facilement le moteur de recherche d'itinéraire (OSRM) avec un conteneur