J'utilise CXF ClientBuilder pour envoyer des données POST à un service REST. La réponse que je me regarde en arrière comme ce moment:Utilisation de CXF ClientBUilder, comment démonter les paramètres de réponse post-traitement en classe Java
errorCode=206&errorMessage=blah+blah
Je veux désorganiser ce dans les champs dans un POJO.
Le bloc de code suivant illustre ce que j'ai en ce moment:
public void validateToken(String token) {
WebTarget target = client.target(getHostPort()).path(getPath());
Builder request = target.request(MediaType.APPLICATION_JSON_TYPE);
Form form = new Form();
form.param("TokenID", token);
Response postResponse = request.post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE));
System.out.println("postResponse[" + postResponse + "]");
System.out.println("response.text[" + postResponse.readEntity(String.class) + "]");
// CodeAndMessage codeAndMessage = request.post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE), CodeAndMessage.class);
// System.out.println("codeAndMessage[" + codeAndMessage + "]");
}
public static class CodeAndMessage {
private String errorCode;
private String errorMessage;
public String getErrorCode() { return errorCode; }
public String getErrorMessage() { return errorMessage; }
public void setErrorCode(String errorCode) { this.errorCode = errorCode; }
public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; }
@Override
public String toString() {
return new ToStringBuilder(this).
append("errorCode", getErrorCode()).
append("errorMessage", getErrorMessage()).
build();
}
}
Comme écrit en ce moment, je reçois la réponse que je décrit à l'origine. J'essaye de comprendre une variation de ces dernières lignes commentées pour remplacer la première "request.post()" et les deux lignes suivantes, pour obtenir le résultat que je recherche.
Mise à jour:
J'ai trouvé au moins un moyen de le faire, mais je ne sais pas si c'est la meilleure façon.
Form responseForm = request.post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE), Form.class);
System.out.println("responseForm[" + responseForm + "] map[" + responseForm.asMap() + "]");
return new CodeAndMessage().
errorCode(responseForm.asMap().getFirst("errorCode")).
errorMessage(responseForm.asMap().getFirst("errorMessage"));
La clé utilisait l'objet Form pour le type de réponse. Avec cette solution, je dois encore référencer les noms de champs. Y a-t-il une façon plus propre de faire cela?
Mise à jour:
Je suppose qu'une solution plus propre, il faudrait mettre en place un MessageBodyReader pour cette classe CodeAndMessage, mais je ne sais pas encore comment faire.