私はクライアントアプリケーションとサーバーアプリケーションを持っています。どちらもJavaを使用して春に書かれています。 RestTemplate
を使用してクライアントからサーバーを呼び出しています。Spring RestTemplate - httpステータスコードに基づいて異なるオブジェクトタイプを読み込みますか?
サーバーは、操作結果に応じて異なる応答オブジェクトを返します。
簡体字コード:
public ResponseEntity<?> saveSomething (Object something) {
boolean saved = save(something); //save logic
if(saved)
return new ResponseEntity<OKObject>(okObject,HttpStatus.OK);
else
return new ResponseEntity<ErrorObject>(errorObject,HttpStatus.FAILED);
}
私は、ステータスコード、
ことで、クライアント上でこれらの回答を読むことができるようにしたいが、RestTemplateは1種類、例えばを読み取るためにのみ提供しています<Object_type>.class
; であり、応答タイプがすでに返されている場合は、.getForEntity(...)
操作が実行された後のステータスコードが です。
私はクライアント側で擬似コードで欲しい :
public void saveSomething(Object toSave) {
ResTemplate template = new RestTemplate();
ResponseEntity<Object> response = template.getForEntity(url,Object.class);
if(response.getStatusCode() == HttpStatus.OK) {
OKObject ok = (OKObject) response.getBody();
//some work with ok object
}
if(response.getStatusCode() == HttpStatus.FAILED) {
ErrorObject errorObject = (ErrorObject) response.getBody();
//some work with errorObject
}
}
は、いくつかの非ハック、クリーンな方法でこれは可能ですか?応答のタイプをString.class
と設定し、それ以降は解析するか、Object.class
(LinkedHashMap
を返す)を読み込んで解析します。
ありがとうございます。
それは本当に悪いです。なぜなら、より多くのresponseObjectを使用すると、より多くの冗長データを転送することができるからです。また、コード内には応答を得るために多くの応答クラスが1つにまとめられています。これは私が望んでいないハッピーな方法です。しかし、応答に感謝します。 – milkamar
もう少し.. ok/errorの1つは常にnullです。ヌルをスキップするようにシリアライズを構成できます。余分な情報(jsonの場合)は、単にフィールド名okかエラーです。 – StanislavL
また、文字列を送信し、ステータスをチェックして、文字列をOKまたはエラーオブジェクト – StanislavL