jsonのコンテンツを私のサーバ(C++)に送るJavaアプリケーションがあります。私は私のサーバーjsonを受け取り、解析、検証などを行い、jsonとの応答も返す。 は、私は、このJSON本体(例)を持っている私のjavaアプリ内の1つの要求を持っている: GSON deserialize/serialize hierarchyクラス
{
"a": "a",
"b": "b",
"searchMethod": {
"searchByUser": {
"userId": "userId"
}
}
}
しかし、同じコマンドのために私が持つことができる
他searchMethod
:だから
{
"a": "a",
"b": "b",
"searchMethod": {
"searchByEmail": {
"email": "[email protected]"
}
}
}
、ユーザーが行いますこの2つの異なるjson bodysのうちの1つを私のサーバに送ることができるように要求する。私たちは何をsearchMethod
送信するのかわからない。この部分(ユーザーが送信するsearchMethodなどを調べる)では、jsonを受け取ったときにC++サーバーで行います。だから私のJavaアプリケーションでは、彼らのコンテンツとsearchMethod
オブジェクトを送信するためにgsonを使用する必要があります。
この私のクラスでは、要求を行うには:
public class RequestExample implements SerializableJSON
{
public String a;
public String b;
public RequestExample(String a, b)
{
this.a = a;
this.b = b;
}
public static RequestExample fromStringJson(String data)
{
try
{
Gson gson = new Gson();
return gson.fromJson(data, RequestExample.class);
}
catch(Exception e)
{
return null;
}
}
public static RequestExample fromBytesJson(byte[] data)
{
if (data == null) return null;
try
{
String str = new String(data, "utf-8");
return fromStringJson(str);
}
catch (Exception e)
{
return null;
}
}
@Override
public String toJsonString()
{
try
{
Gson gson = new Gson();
return gson.toJson(this);
}
catch(Exception e)
{
return null;
}
}
@Override
public byte[] toJsonBytes()
{
try
{
return this.toJsonString().getBytes("utf-8");
}
catch (Exception e)
{
return null;
}
}
}
は、私はすでに、この要求でa
とb
、その常に同じフィールドを実装します。このクラスでは、fromStringJson(String data)
は、ユーザーが送信しようとするすべてのjsonを含むデータ文字列フィールドを受け取ります。この関数では、私はこの文字列を私のRequestExample
クラスのjsonオブジェクト型に変換するためにgson.fromJson
を使用します。
したがって、主な質問は、RequestExample
クラスを使用して、searchMethod
の種類に関係なく、文字列をjsonオブジェクトに変換する方法です。私は私のJavaアプリケーションで言ったように私はどのようにユーザが選択するseachMethod
を知る必要はありません。はい、私のサーバーでは、この部分はすでに実装されています。今のところ、私は自分のサーバーにリクエストを送信するだけです。
おかげのようにそれを実装することができます。私はあなたのコードを理解していますが、疑問が1つあります。オブジェクトは何ですか? searchByUserまたはsearchByEmail?このマップでは、私はいくつかのオブジェクトを定義する必要がありますが、私はオブジェクトのタイプを知っていないユーザーが選択します。あなたは疑いを理解していますか?同じコマンドは、searchByUserまたはsearchByEmailを持つことができます。私は自分の文字列データを受け取ったとき、私はユーザーが入れたsearchMethodを知らないのです – RMRMaster
申し訳ありません。私はユーザJavaの検索を必要としない。私はこのようなマップしか使用できません: Map> searchMethod、私のサーバーで行うjsonコンテンツに関する評価。この方法で私はsearchMethodと内部のC++サーバーを送信することができますjsonを解析して検証を行います:) –
RMRMaster
私が理解したように、あなたは解決策を見つけましたので、他の人の回答を編集しました –