Javaはフロントエンドから伝達された多層ネストされた複雑なjson列をどのように受信するか
1760 ワード
問題の直接的な解決方法を見たいなら、直接博文の底に引っ張ってください.
Springのcontrollerフロントエンドパラメータ受信時に@RequestBodyタグを使用した場合
フロントエンドパラメータをJSON形式に変更しますが、もちろん内部がどのように実現されているのか、私のような鶏料理は今のところ分からないに違いありません.
しかし、JSONがネストされているときなど、DTOにStringタイプのパラメータが含まれていると思っていた場合があります.Jsonは文字列に相当するのではないでしょうか.
整理してみると、先端から伝わるパラメータがこんな感じ
しかし実際上のJSONは間違ったjsonであり、通常のパスではJsonを以下のフォーマットに書くことはできません.
通常のjsonフォーマットは上のようなものですが、この時は迷ってしまいました.文字列形式が受け入れられない以上、ここのパラメータはどうすればいいのでしょうか.
ビジネスロジックによると、DTOで必要なエンティティクラスをカプセル化することができます.例えば、Userのパラメータを配置することができます.
しかし、ある時、私たちは中のエンティティクラスのコードを全然知らないことに気づきます.このエンティティクラスにはもっと多くの他のエンティティクラスがネストされています.
パラメータとしてObjectを選択しました
その後、データを保存するときは次のコードでJsonをStringに変換してデータベースに格納できます.
大功告成、大体解决方法は上の凉行コードで、もちろんあなたも别の方法を选ぶことができて、结局问题を解决することができる方法はすべて良いです
Springのcontrollerフロントエンドパラメータ受信時に@RequestBodyタグを使用した場合
@RequestBody
フロントエンドパラメータをJSON形式に変更しますが、もちろん内部がどのように実現されているのか、私のような鶏料理は今のところ分からないに違いありません.
しかし、JSONがネストされているときなど、DTOにStringタイプのパラメータが含まれていると思っていた場合があります.Jsonは文字列に相当するのではないでしょうか.
整理してみると、先端から伝わるパラメータがこんな感じ
{
"Code": "001",
"state": 0,
"content": "{
"name": " ",
"age": 18
}"
}
-------------------2020-06-24 json --------------------
{
"Code": "001",
"state": 0,
"content": "{
\"name\": \" \",
\"age\": 18
}"
}
しかし実際上のJSONは間違ったjsonであり、通常のパスではJsonを以下のフォーマットに書くことはできません.
{
"Code": "001",
"state": 0,
"content": {
"name": " ",
"age": 18
}
}
通常のjsonフォーマットは上のようなものですが、この時は迷ってしまいました.文字列形式が受け入れられない以上、ここのパラメータはどうすればいいのでしょうか.
ビジネスロジックによると、DTOで必要なエンティティクラスをカプセル化することができます.例えば、Userのパラメータを配置することができます.
しかし、ある時、私たちは中のエンティティクラスのコードを全然知らないことに気づきます.このエンティティクラスにはもっと多くの他のエンティティクラスがネストされています.
パラメータとしてObjectを選択しました
/**
* json
*/
private Object content;
その後、データを保存するときは次のコードでJsonをStringに変換してデータベースに格納できます.
Vo vo= new Vo();
JSONObject jsonObject = JSONObject.fromObject(applyRecordDto.getContent());
String s = jsonObject.toString();
vo.setContent(s);
大功告成、大体解决方法は上の凉行コードで、もちろんあなたも别の方法を选ぶことができて、结局问题を解决することができる方法はすべて良いです