Ich schreibe eine Webanwendung in Java. Ich verwende SendGrid, um E-Mails vom System zuzustellen, aber wenn die E-Mail-Zustellung aus irgendeinem Grund fehlschlägt, nachdem ich angenommen habe Da die Verarbeitung Moos war, werde ich es als Memorandum schreiben. ~~ Alles war eine Implementierung, die aus der Überzeugung des Vorgängers entstand, dass "eine Antwort auch im Fehlerfall ein Ergebnis zurückgibt". ~~
Installieren Sie SendGrid Java Library in build.gradle, um eine E-Mail-Versandmethode zu erstellen. Wenn SendGrid in den 400er Jahren einen Fehler zurückgibt, wird dieser aufgrund eines unvollständigen Anforderungsparameters, der von hier gesendet wurde, oder einer übermäßigen Anforderung nicht wiederholt. Es wird ein Protokoll hinterlassen und Fehlerinformationen an die Vorderseite zurückgegeben, um den Prozess zu beenden. Bei der 500er-Serie ist ein Fehler im SendGrid-Server aufgetreten, daher habe ich ihn erstellt, um ihn 2-3 Mal zu versuchen.
Referenz: SendGrid: Statuscode und Fehler
dependencies {
compile ('com.sendgrid:sendgrid-java:4.0.1')
}
import com.sendgrid.*;
import java.io.IOException;
public class Example {
public static void main(String[] args) throws IOException {
SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY"));
try {
Request request = new Request();
request.setMethod(Method.GET);
request.setEndpoint("api_keys");
Response response = sg.api(request);
if (response.getStatusCode() < 300) {
//Die Serie 200 wird weiterhin wie gewohnt übertragen
} else if (response.getStatusCode() < 500){
//Der Fehler der Serie 400 wird als ungültig beurteilt und die Verarbeitung endet
//Hinterlassen Sie ein Protokoll und senden Sie die Fehlermeldung an die Vorderseite
} else {
//Der Fehler der Serie 500 wird aufgrund eines SendGrid-Serverfehlers mehrmals wiederholt
//Bewahren Sie das Protokoll auf
}
} catch (IOException ex) {
throw ex;
}
}
}
Ich habe es so erstellt, dass der Statuscode in der wie oben zurückgegebenen Antwort beurteilt und die nachfolgende Verarbeitung verteilt wird ~~ (Vorgänger) ~~. Beim Erstellen einer E-Mail ist ein Fehler in der Validierungsprüfung aufgetreten. Die Nachbearbeitung wird nicht durchgeführt, wenn die E-Mail nicht gesendet werden kann, und das erwartete Protokoll bleibt nicht erhalten. Daher stellt sich heraus, dass diese Implementierung fehlerhaft ist.
Folgen Sie der api () -Methode der Klasse com.sendgrid.SendGrid, um festzustellen, wohin Sie die Anforderung tatsächlich an SendGrid senden. (Weggelassen, da Sie es in 3-4 Schritten erreichen können)
private Response executeApiCall(HttpRequestBase httpPost) throws IOException {
try {
CloseableHttpResponse serverResponse = httpClient.execute(httpPost);
try {
Response response = getResponse(serverResponse);
if(response.getStatusCode() >= 300) {
//throwing IOException here to not break API behavior.
throw new IOException("Request returned status Code "+response.getStatusCode()+"Body:"+response.getBody());
}
return response;
} finally {
serverResponse.close();
}
} catch(ClientProtocolException e) {
throw new IOException(e.getMessage());
}
}
Sie können sehen, dass die com.sendgrid.Client-Klasse eine executeApiCall () -Methode hat, die () in der 3. Zeile ausführt, und vor allem die if-Anweisung in der 6. Zeile löst eine IOException aus. Selbst wenn der Statuscode größer als 300 ist, können Sie die Antwort mit diesem Wert füllen und zurückgeben. .. ..
Caused by: java.io.IOException: Request returned status Code 400Body:
{
"errors": [
{
"message": "Invalid replyTo email address",
"field": "reply_to",
"help": null
}
]
}
Da SendGrid eine Fehlermeldung wie oben zurückgibt, hätte ich die nachfolgende Verarbeitung von der abgefangenen IOException anstelle der Antwort schreiben sollen. In Anbetracht der Tatsache, dass in SendGrid in den letzten 1 bis 2 Jahren kein schwerwiegender Fehler aufgetreten zu sein scheint, und der Nutzungsrate von E-Mails wird der Wiederholungsvorgang gelöscht und eine Fehlermeldung schnell angezeigt (Validierungsprüfung wurde behoben). Der 400s-Fehler sollte also nicht auftreten!).
Es war ein verdächtiger Fall, in dem sich meine Annahmen und Mängel in verschiedenen Tests überschnitten, aber es war ein Ereignis, bei dem ich gelernt habe, den Rückgabewert der verwendeten Bibliothek zu überprüfen und zu verwenden.
Recommended Posts