views:

72

answers:

2

I want to convert user input that comes as Map<String, String[]> to objects in Java. More specically I want to convert the params of a HttpServletRequest to the fields of an arbitrary domain object.

I'd like to have something like this:

Domain d = Converter.convert(params, new Domain());

If there is more than one element in the string array, which is the value of a map entry, it should be converted to a list or array. Maybe the locale should be considered for date and currency conversion. And a list of conversion errors would be nice.

Is there a library with such a converter?

Would you call it "converter"? I think it is often called "data binding", but that is the wrong term in my opionion, since it is related to binding model values to GUI elements, what is a slightly different thing - isn't it?

A: 

Don't use this plain code as it is only an example. You should add some pretty exception handling and a loop through a map. But generally the idea is like this:

void putValue(String name, String value, Object object) throws Exception {
    String setterName = "set"+name.substring(0,1).toUpperCase()+name.substring(1);
    Method m = object.getClass().getMethod(setterName, String.class);
    if (m!=null) {
        m.invoke(object, value);
    }
}

This code, given a parameter name 'name' will try to find a method setName(String name) and call it with the given value.

Max
+1  A: 

If your web framework does not support this functionality have a look at
http://commons.apache.org/beanutils/ ,espeically the beanutils package which has classes with similar purposes (maybe exactly the same) that you want.

You may also consider switching to a more mature framework ;-)

Sandor Murakozi