フロントエンドネストオブジェクトパラメータをspring mvcに渡す
2689 ワード
springmvcを用いてwebアプリケーションを開発する際,springmvcのcontroller法がメソッドのパラメータオブジェクトにパラメータを自動的に注入できると感じ,開発が極めて便利になった.しかし、ネストされたオブジェクトがある場合、例えば受注オブジェクトにユーザーオブジェクトという属性があると、扱いにくい.1つのケースでは,伝達されたパラメータはpostメソッドの要求体として用いられ,RequestBodyで注釈することができる.しかし、条件が満たされないと、この方法は使えません.多くの人が好む方法は、オブジェクトをjson文字列にシーケンス化し、json文字列を受信してから逆シーケンス化することです.この方法は問題を解決することができますが、時にはトラブルにも遭遇します.例えば汎用型がある場合、例えばcontrollerは注釈を使っていくつかのパラメータを検証します.この時、私たちはこのような状況を適用する新しい方法を望んでいます.次のコードは、jsのネストされたオブジェクトをhttpリクエストパラメータに変換するkey=value標準形式をjsで実装し、サービス側に渡すものです.サービス側のcontrollerは、http標準パラメータ形式でサポートされている方がよいため、controllerパラメータのネストされたオブジェクトに容易に注入できます.
/**
* js key=value http key=value 。
* js value , , ( 、 , ),
springmvc , 。
* 。 json 。
, 。
*/
let toHttpParams = (function(){
function serialize(key, value, param) {
if(Array.isArray(value)) {
for(let i = 0; i < value.length; i++) {
serialize(key + '[' + i + ']', value[i], param)
}
} else if(value != undefined && value.constructor === Object) {
for(let k in value) {
serialize(key + '.' + k, value[k], param);
}
} else {
param[key] = value;
}
}
function serializeObj(obj) {
const param = {};
for(let k in obj) {
serialize(k, obj[k], param);
}
return param;
}
return serializeObj;
})();