#java #microservices #jax-rs #wildfly
#Ява #микросервисы #jax-rs #дикая муха
Вопрос:
Я новичок в Jax-RS, и мне нужно создать этот сервис для управления некоторыми пользователями, я создал:
- UserDao: класс java для выполнения операции DAO.
- Пользователь: сущность Java с аннотациями hibernate
- Служба пользователей: сервер 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. Решено, спасибо :), это был такой глупый вопрос, но вчера меня действительно заблокировали.