Джерси и картограф объектов

Я немного смущен тем, когда мне нужно использовать средство отображения объектов. Я подумал, что его следует использовать для сопоставления набора результатов из запроса БД с объектами, поэтому я создал средство сопоставления объектов следующим образом:

public class PersonMapper implements ResultSetMapper<Person>
{
    public Person map(int index, ResultSet resultSet, StatementContext ctx) throws SQLException
    {
        Person person = new Person();
        person.setPersonId(resultSet.getShort("PersonId"));
        person.setPersonType((PersonType) resultSet.getObject("PersonType"));
        person.setPersonName(resultSet.getString("PersonName"));
        person.setPersonMobile(resultSet.getString("PersonMobile"));
        return person;
    }
}

Затем я зарегистрировал его в конкретном DAO следующим образом: @RegisterMapper(PersonMapper.class)

Однако, кажется, что все работает и без маппера, даже если я делаю такой запрос: List<Person> list = list(namedQuery("Person.findAll"));, который возвращает правильный список.

Итак, когда именно я должен использовать картограф?


person Yonatan Nir    schedule 22.08.2016    source источник


Ответы (1)


если вы говорите о классе ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper), то мы используем его для сохранения всего объекта POJO в виде строки JSON в базе данных, в которой вам нужно сохранить тип данных столбца как json, а создание таблицы...

поэтому мы используем это так

public Response saveStateRules(@Context HttpServletRequest request,StatePojo statePojo)
    {
        ObjectMapper mapper = new ObjectMapper(); 
        String json = mapper.writeValueAsString(statePojo);

        State state = new State();

        state.setRulejson(json);
}

куда,

public class StatePojo implements Serializable{

    private Integer stateid;
    private ArrayList<StateRuleCondition> fieldconditions;
    private ArrayList<Integer> stateids;

    private Boolean isallow;

// contains all getters and setters

}
person Vaibhav Shimpi    schedule 22.08.2016
comment
результат setmapper определен в org.skife.jdbi.v2.tweak.ResultSetMapper - person Yonatan Nir; 22.08.2016
comment
Кстати, что Джерси использует по умолчанию для обработки Json? Я не определил что-то конкретное - person Yonatan Nir; 22.08.2016
comment
Могу я узнать, где вы хотите обрабатывать json? я имею в виду любое состояние, когда требуется обработка - person Vaibhav Shimpi; 22.08.2016
comment
Например, пользователь может отправить мне строку json в веб-службу, и Джерси автоматически создает для меня объект без преобразователя (метод веб-службы получает этот объект в качестве параметра).. как он это делает? - person Yonatan Nir; 22.08.2016
comment
это то, что я сделал в опубликованном примере. Я получаю строку json в объекте StatePojo, который был создан с помощью jquery/javascript с использованием метода JSON.stringify({stateid: 5, isallow: true}), поэтому весь этот StatePojo я могу сохранить в базе данных, если база данных содержит тип данных столбца как json - person Vaibhav Shimpi; 22.08.2016
comment
Вы использовали его для преобразования объекта в строку json, и я не понимаю, зачем вам это делать. В любом случае, это, вероятно, не тот преобразователь, поскольку мой создает объект, а не строку json. - person Yonatan Nir; 22.08.2016
comment
на самом деле мы сохраняем всю строку json в нашу БД как ту строку json, которую мы используем в нашем приложении для Android, и извлекаем ее всякий раз, когда это требуется в задней части, путем преобразования обратно в требуемый объект класса через ObjectMapper.. где, ObjectMapper mapper = new ObjectMapper(); someClass classObj = mapper.readValue (pojo.getjson(), someClass.class); таким образом мы извлекаем сохраненную строку json из базы данных - person Vaibhav Shimpi; 22.08.2016