практика Предположим, что у меня есть очень простой User
класс:Джерси: Лучший обработки успокоительный HTTP PUT (обновление) запрос
@JsonIgnoreProperties({"password", "created", "lastModified"})
public class User {
public String id;
public String name;
public String password
public Long created;
public Long lastModified;
}
Когда мы сериализовать User
объект в JSON строку, мы отфильтровывать password
, created
и lastModified
. И затем пользователь в передней части обновит имя пользователя и вернет пользователя обратно в нашу службу Restful.
И мой псевдо метод контроллера обработки PUT
запрос:
@Path("/user/{id}")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void saveUpdate(@PathParam("id")String id, User user) {
userService.save(user);
}
В приведенном выше методе я ожидаю Джексон десериализации строку JSON, посланный передним концом к user
например POJO, а затем позвоните в нашу службу, чтобы сохранить экземпляр.
Пока все выглядит круто. Однако беспокойство возникает, когда мы передаем user
POJO на номер userService
, чтобы сохранить его. Помните, что у нас есть три свойства, которые игнорируются, когда мы сериализуем user
в JSON: password
, created
, lastModified
, и мы должны получить значение этих недостающих свойств из базы данных, а затем объединить с данными, отправленными с передней стороны.
Выполнение операции слияния - очень простая, но утомительная задача для кодера. Мне было интересно, есть ли какие-либо хорошие методы для легкого и изящного решения этого случая.
от 'id' Я имею в виду используемый общий идентификатор, может быть UUID или любой другой идентификатор, используемый в системе подчеркивания; DTO не то, что я люблю. Чем меньше код, тем лучше; Можете ли вы указать ссылку на ** хороший ** пример, используя 'ObjectMapper'? 'PUT' не рекомендуется, потому что многие брандмауэры блокируют его. Вы все равно можете использовать 'PUT', но подделывать его через' POST' с заголовком 'X-HTTP-Method-Override', установленным на' PUT' –
Фактически 'PUT' не подходит в случае, потому что по семантике предполагается обновить специфический атрибут 'User', а не весь объект. Я меняю его на 'POST' в вопросе –
Я просто быстро google' ObjectMapper' и обнаружил, что это не поможет вам сопоставить 'DTO' с Entity. Фактически он преобразует ваш объект Java в/из строки JSON. –