Проблема JAX-RS (RestEasy) при передаче идентификатора для обновления объекта

#java #microservices #jax-rs #wildfly

#Ява #микросервисы #jax-rs #дикая муха

Вопрос:

Я новичок в Jax-RS, и мне нужно создать этот сервис для управления некоторыми пользователями, я создал:

  1. UserDao: класс java для выполнения операции DAO.
  2. Пользователь: сущность Java с аннотациями hibernate
  3. Служба пользователей: сервер Jax-Rs.

Здесь я публикую код, затем вопрос:

 @Entity(name = "User") public class User {  @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)   private int id;  public int getId() {  return id;  }   private String username;   public User() {   }   public User(String username) {  this.username = username;  }     public String getUsername() {  return username;  }   public void setUsername(String username) {  this.username = username;  }  

Тогда у меня есть ДАО:

 EntityManagerFactory factory =  Persistence.createEntityManagerFactory("psUnit");  @PersistenceContext EntityManager em = factory.createEntityManager();  @Override public void create(User user) {   em.getTransaction().begin();  em.persist(user);   em.flush();  em.getTransaction().commit();  }  @Override public User read(int id) {  em.getTransaction().begin();  User u = em.find(User.class, id);  em.getTransaction().commit();  return u; }  @Override public void update(User user) {  User old_user = this.read(user.getId());  old_user.setUsername(user.getUsername());;  em.getTransaction().begin();  em.merge(old_user);  em.getTransaction().commit();   }  @Override public void delete(User user) {  em.getTransaction().begin();  em.remove(user);  em.getTransaction().commit();   }   public Listlt;Usergt; findAll() {   TypedQuerylt;Usergt; results = em.createQuery("from User", User.class);  return results.getResultList();    }  

And at the end of the service class:

 @Path("/UserService") public class UserService {  UserDaoImpl userDaoImpl = new UserDaoImpl();   @Path("/create")  @POST  @Produces(MediaType.APPLICATION_JSON)  @Consumes(MediaType.APPLICATION_JSON)  public void createUserFromJsonRequest(User s) {  System.out.println("**Received JSON request**");  System.out.println(" Name : "   s.getUsername());   userDaoImpl.create(s);   }     @Path("/delete")  @POST  @Produces(MediaType.APPLICATION_JSON)  @Consumes(MediaType.APPLICATION_JSON)  public Response deleteUser(User s) {  userDaoImpl.delete(s);  return Response.ok().build();  }      @Path("/update")  @POST  @Produces(MediaType.APPLICATION_JSON)  @Consumes(MediaType.APPLICATION_JSON)  public Response update(User s) {   userDaoImpl.update(s);  return Response.ok().build();  }     @Path("/getall")  @GET  @Produces(MediaType.APPLICATION_JSON)  public Response getAll() {  Listlt;Usergt; users = userDaoImpl.findAll();  return Response.ok(users).build();   }      @GET  @Path("/findbyid")  @Consumes(MediaType.APPLICATION_JSON)  @Produces(MediaType.APPLICATION_JSON)  public User getUserById(@QueryParam("id") int id) {  User retrieved = userDaoImpl.read(id);  System.out.println(retrieved.toString());  return retrieved;    }  

Если я хочу создать пользователя, я делаю этот простой запрос на публикацию, используя бессонницу: Отправьте запрос на создание пользователя .

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

запрос на обновление для изменения имени пользователя идентификатор, который проходит через приложение java, равен 0, а не тому, который я передал (3 на изображении), и я действительно не знаю, почему идентификатор равен 0, а не 3, когда я передал (кстати, переданное имя пользователя правильное)

Что я делаю не так? Я немного в замешательстве, должен ли я реализовать DTO/Mapper? что-то не так с моей конфигурацией?

Комментарии:

1. Вам нужен, по крайней мере, сеттер для удостоверения личности. Десериализатор вызовет сеттера для установки идентификатора. Для ПОЛУЧЕНИЯ вам также понадобится получатель.

2. Решено, спасибо :), это был такой глупый вопрос, но вчера меня действительно заблокировали.