-Ich möchte mit einer externen API über HTTP aus dem in Java implementierten Prozess kommunizieren. ・ Ich möchte XML in den Body packen ・ Ich mag etwas, das so einfach wie möglich zu implementieren ist.
Lesen Sie den Artikel im Internet, OkHttp(https://square.github.io/okhttp/) Ich habe eine Bibliothek namens benutzt.
<!-- http client -->
<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>3.7.0</version>
</dependency>
In diesem Beispiel wird XML in den Body gepackt und die API aufgerufen. Empfängt die von der API zurückgegebene XML-Zeichenfolge und gibt sie zurück.
public String callSomething(String xml) throws IOException {
    return new OkHttpClient().newCall(
                new Request.Builder()
                    .url("[Kommunikations-URL]")
                    // basic authentication
                    .header("Authorization",
                            Credentials.basic(
                                    "[Benutzer der Basisauthentifizierung]",
                                    "[Standardauthentifizierungskennwort]"))
                    .post(RequestBody.create(MediaType.parse("text/xml"), xml))
                    .build()
            ).execute()
            .body()
            .string();
}
Welcher ist der beste HTTP-Client für Java? https://qiita.com/alt_yamamoto/items/0d72276c80589493ceb4
・ Es ist nicht gut, jedes Mal neu zu machen ・ Die Timeout-Zeit muss je nach Umgebung entsprechend eingestellt werden. Ich habe es basierend auf diesem Punkt korrigiert.
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class MyService {
    private OkHttpClient client;
    @PostConstruct
    public void init() {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.connectTimeout(150, TimeUnit.SECONDS);
        builder.readTimeout(150, TimeUnit.SECONDS);
        builder.writeTimeout(150, TimeUnit.SECONDS);
        client = builder.build();
    }
    public String callSomething(String xml) throws IOException {
        try (Response res = client.newCall(
                new Request.Builder()
                    .url("[Kommunikations-URL]")
                    .header("Authorization",
                        Credentials.basic(
                            "[Benutzer der Basisauthentifizierung]",
                            "[Standardauthentifizierungskennwort]"))
                    .post(RequestBody.create(MediaType.parse("text/xml"), xml))
                .build()).execute()) {
            return res.body().string();
        }
    }
}
        Recommended Posts