私は Java Web プロジェクトを開発していますが、Spring MVC、Spring Web フローを適用していません (非常に単純であるため)。HTTP リクエストから Java オブジェクトに値をアタッチするときに小さな問題があります。Spring を使用せずに、クライアント要求からサーバー オブジェクトにデータを自動的にバインドする (プロパティ名に一致する) ことをサポートするスタンドアロン ライブラリまたはユーティリティはありますか? クライアント要求のパラメーターが既にマップに組み込まれていると想定します。
Grails (Groovy の Web フレームワーク) を使用する場合、: を使用してオブジェクトのリクエスト パラメータにデータを入力する非常に優れた方法がありますobject.properties=parameters
が、Java でそれを実装する同様のメカニズムがあるかどうかはわかりません。
どうもありがとう。
質問する
466 次
1 に答える
2
Apache Commons はBeanUtilsBeanに役立つかもしれません。や などのクールなメソッドがgetProperty()
ありsetProperty()
、リフレクションを使用して手動でコーディングしたい場合に役立ちます。populate(Object bean, Map properties)
あなたが望むものに最も近いと私が信じている方法もあります。
Dozerは、ある構造から別の構造へのマッピングに特化した Java ライブラリです。それは役立つかもしれません。
この男は、coderanch に同様の質問を投稿し、いくつかの議論の後、次のことを思いつきました。
public static <T extends Object> T setFromMap(Class<T> beanClazz, HashMap<String, String> propValues) throws Exception
{
T bean = (T) beanClazz.newInstance();
Object obj = new Object();
PropertyDescriptor[] pdescriptors = null;
BeanInfo beanInfo = Introspector.getBeanInfo(beanClazz);
pdescriptors = beanInfo.getPropertyDescriptors();
for(int i=0; i<pdescriptors.length; i++)
{
String descriptorName = pdescriptors[i].getName();
if(!(descriptorName.equals("class")))
{
String propName = descriptorName;
String value = (String) propValues.get(propName);
if(value != null)
{
Object[] objArray = new Object[1];
objArray[0] = value;
Method writeMethod = pdescriptors[i].getWriteMethod();
writeMethod.invoke(bean, objArray);
}
}
}
return bean;
}
于 2012-11-04T16:51:17.467 に答える