2016-03-31 2 views
0

У меня есть проблема с BeanUtils, мне нужно преобразовать карту в Pojo с различными именами свойствBeanUtils: Различные имена свойств

объект:

public class User { 
    private int id; 
    private String nickname; 
    private int agility; 

    public int getId() { 
     return id; 
    } 

    // getters and setters 
} 

Целевое приложение API возвращает HashMap (с помощью XML-RPC) с чем-то вроде этого:

user_id => "123456" 
nickname => "Bob" 
agility => 30 

но мой класс POJO не имеет user_id свойство

как перевести название недвижимости user_id =>id?

я не нашел никаких аннотаций для этого случая

+1

бульдозер, и аналогичный боб картированию ЛИЭС, являются лучшим делать ставку. Кроме того, для этого можно использовать JSON mapping libs, как вы обнаружили. – kaqqao

ответ

1

BeanUtils не подходит для моего случая, я использовал Gson библиотеку. У Gson есть функция - конвертировать объект в json. После этого я конвертирую json в класс User. name свойства отмечено аннотацией @SerializedName

Класс сущностей:

class User { 
    @SerializedName("user_id") 
    private int id; 
    private String name; 

    // getters and setters here 
    // .toString 
} 

использование:

Map<String,String> apiObject = new HashMap<>(); 

apiObject.put("user_id","123123"); 
apiObject.put("name","Bob"); 

Gson gson = new Gson(); 
String json = gson.toJson(values); 
User user = gson.fromJson(json, User.class); 

System.out.println(user); 

Пример вывод:

User{id=123123, name='Bob'} 
1

Если разрешено позже в HashMap после того как вы получили его, вы меняете изменить ключ.

map.put("id", map.remove("user_id")); 

Затем используйте BeanUtils, чтобы заполнить ваш боб:

User usr = new User(); 
BeanUtils.populate(usr, map); 
+0

спасибо, но если у меня 20 проблем с именем поля? –

+0

Вы можете использовать 20 полей на карте и использовать их для замены ключа вашей карты данных. – mks

+0

Это решение требует поддержки полей, заменяющих список, это не подвижно. n + 1 объектов и 20+ полей -> поддержка ада. я думаю о трюке с gson (я буду проверять и писать об этом позже) –