[JAVA] [API] Ich habe versucht, die Postleitzahlensuch-API zu verwenden

Versuchen Sie, eine App mithilfe der API zu erstellen

Hintergrund

Inhaltsverzeichnis

0. Umweltprüfung

1. Überprüfen Sie die API

--Überprüfen Sie die Verwendung der API auf der folgenden Site. https://zip-cloud.appspot.com/doc/api

--Überprüfen Sie die technischen Daten.

2. Erstellen Sie ein Projekt

Weitere Informationen finden Sie in einem anderen Artikel. Erstellen Sie ein Spring Boot-Projekt für Gradle

3. Backend-Implementierung

build.gradle


//Unterlassung
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());
    }
}

--Serviceklasse

FrontService.java


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

FrontServiceImpl.java


@Service
public class FrontServiceImpl implements FrontService {

    /**Postleitzahlensuch-API Anforderungs-URL*/
    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;
	}
}

AddressForm.java


@Data
public class AddressForm {

	/**Postleitzahl*/
	String zipcode;
}

4. Front-End-Implementierung

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">Holen Sie sich eine 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("Postleitzahl",result.zipcode));
					table.appendChild(createRow("Präfekturcode",result.prefcode));
					table.appendChild(createRow("Name der Präfekturen",result.address1));
					table.appendChild(createRow("Stadtname",result.address2));
					table.appendChild(createRow("Name des Stadtgebiets",result.address3));
					table.appendChild(createRow("Präfekturname Kana",result.kana1));
					table.appendChild(createRow("Kommunaler Name Kana",result.kana2));
					table.appendChild(createRow("Stadtgebietsname 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. Funktionsprüfung

--Geben Sie "100-0001" (Postleitzahl des Kaiserpalastes) ein und drücken Sie die Adressenerfassungstaste ブラウザ起動2.png

6. Bonus

___ So konvertieren Sie das Json-Format in eine DTO-Klasse und erhalten ___

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")
    //Ändern Sie den Rückgabewert von String in ZipcodeDto
    public ZipcodeDto getAddress(@RequestBody(required = false) AddressForm addressForm) {
		return frontService.getAddress(addressForm.getZipcode());
    }
}

--Serviceklasse (Korrektur)

FrontService.java


public interface FrontService {
    //Ändern Sie den Rückgabewert von String in ZipcodeDto
	public ZipcodeDto getAddress(String zipCode); 
}

--DTO Klasse (zusätzlich)

ZipcodeDto.java


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

    /**Botschaft*/
    String message;

    /**Postleitzahl Informationsliste*/
    List<ZipcodeResultDto> results = new ArrayList<>();
}

--DTO Klasse (zusätzlich)

ZipcodeResultDto.java


@Data
public class ZipcodeResultDto {

	/**Postleitzahl*/
    String zipcode;

    /**Präfekturcode*/
    String prefcode;

    /**Name der Präfekturen*/
    String address1;

    /**Stadtname*/
    String address2;

    /**Name des Stadtgebiets*/
    String address3;

    /**Präfekturname Kana*/
    String kana1;

    /**Kommunaler Name Kana*/
    String kana2;

    /**Stadtgebietsname Kana*/
    String kana3;
}

FrontServiceImpl.java


@Service
public class FrontServiceImpl implements FrontService {
     //ObjectMapper hinzugefügt
	@Autowired
	ObjectMapper objectMapper;

     //Ändern Sie die URL-Parameter in reguläre Ausdrücke
    private static final String URL = "https://zip-cloud.appspot.com/api/search?zipcode=%s";

	@Override
	public ZipcodeDto getAddress(String zipCode) {
		ZipcodeDto zipcodeDto = null;;
		try {
            //Geben Sie die URL und die empfangende Klasse in ObjectMapper an
			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 {

     //RestTemplate hinzugefügt
	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 {

           //MappingJackson2HttpMessageConverter wurde zu messageConverter von reatTemplate hinzugefügt
			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. Zusammenfassung

Recommended Posts

[API] Ich habe versucht, die Postleitzahlensuch-API zu verwenden
03. Ich habe eine Anfrage von Spring Boot an die Postleitzahlensuch-API gesendet
Ich habe versucht, die Java8 Stream API zu verwenden
Versuchen Sie, die Springcode-Such-API mit Spring Boot aufzurufen
Code zum Verbinden von Rails 3 mit PostgreSQL 10
[API] Ich habe versucht, die Postleitzahlensuch-API zu verwenden
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Ich habe versucht, die Stream-API zusammenzufassen
Ich habe versucht, Gson zu benutzen
Ich habe versucht, TestNG zu verwenden
Ich habe versucht, Galasa zu benutzen
Ich habe versucht, den Profiler von IntelliJ IDEA zu verwenden
Rails-API-Modus Ich habe versucht, die Mehrfachsuchfunktion für Schlüsselwörter mithilfe von Arrays und iterativer Verarbeitung zu implementieren.
Ich habe versucht, die Server-Push-Funktion von Servlet 4.0 zu verwenden
Ich habe versucht, das Migration Toolkit für Anwendungsbinärdateien zu verwenden
[Java] Ich habe versucht, die Yahoo API-Produktsuche zu implementieren
Ich habe versucht, Azure Cloud-Init zu verwenden
Ich habe versucht, Apache Wicket zu verwenden
Ich habe versucht, Java REPL zu verwenden
Ich habe versucht, den Quellcode zu analysieren
Ich habe das FizzBuzz-Problem ausprobiert
Ich habe versucht, das GitHub-Repository als Bibliotheksserver zu verwenden
Ich habe versucht, die Umgebung nach und nach mit Docker aufzubauen
Ich habe versucht, die CameraX-Bibliothek mit Android Java Fragment zu verwenden
Ich habe jetzt versucht, Anakia + Jing zu verwenden
Ich habe etwas versucht, das als rekursive Suche bezeichnet wird
Ich habe versucht, Spring + Mybatis + DbUnit zu verwenden
Ich habe versucht, JOOQ mit Gradle zu verwenden
Ich habe versucht, die Methode zu erklären
Ich habe das Java-Framework "Quarkus" ausprobiert.
[Rails] Ich habe versucht, die Anwendung zu löschen
Ich habe versucht, JWT in Java zu verwenden
[Android] Ich habe versucht, das Koordinatorlayout zu verwenden.
Ich habe versucht, Pari GP Container zu verwenden
Ich habe versucht, WebAssembly Stadio (Version 2018/4/17) zu verwenden.
Ich habe versucht, Java Memo LocalDate zu verwenden
Ich habe versucht, Google HttpClient von Java zu verwenden
[Metall] Ich habe versucht, den Fluss bis zum Rendern mit Metall herauszufinden
Ich habe versucht, die Cache-Funktion des Application Container Cloud Service zu verwenden
Beispielcode zum Aufrufen der Yahoo! Local Search API in Java
Ich habe versucht, den Kalender mit Java auf der Eclipse-Konsole anzuzeigen.
Ich habe versucht, Realm mit Swift UI zu verwenden
Ich habe versucht, Processing auf VS Code zu migrieren
Ich habe versucht, das Java-Diagnosetool Arthas zu verwenden
Ich habe versucht, UICollectionViewListCell zu verwenden, das von Xcode12 hinzugefügt wurde.
Eine Geschichte, der ich beim Testen der API mit MockMVC verfallen war
Versuchen Sie es mit der Stream-API in Java
Ich habe versucht, Scalar DL mit Docker zu verwenden
Ich habe das neue Yuan-Problem in Java ausprobiert
Ich habe versucht, AOJs binäre Suche zu lösen
Ich habe versucht, OnlineConverter mit SpringBoot + JODConverter zu verwenden
Es ist neu, aber ich habe versucht, Groonga zu verwenden
Ich habe versucht, das Iterator-Muster zu implementieren
Ich habe versucht, die Routensuchmaschine (OSRM) einfach mit einem Container auszuführen