#java #servlet #rest #веб_служба
Есть приложение, которое соединяется с бд через glassfish ресурсы и все работает. Используются servlet. Как это можно реализовать с использованием RESTful. Не понимаю что куда должно передаваться и как. Как REST принимает из формы и возвращает. Все что я находила было с возвращением статуса, а не ресурсов. Так же интересно как реализовать ввод логина и пароля и получать приветствие с именем пользователя, соответствующего этим логину и паролю в бд. Я совсем плаваю в этом.( CRUD операции: @Stateless public class UserLogIn { @PersistenceContext(unitName = "LEADER") public EntityManager em; public UserLogIn(){} public void add(User user){ if (!user.getLogin().equals("") || !user.getPassword().equals("") || !user.getUsername().equals("")){ em.persist(user); } } public void delete(int id){ em.remove(getUser(id)); } public User getUser(int id){ return em.find(User.class, id); } public void update(User user){ em.merge(user); } public ListgetAll(){ TypedQuery namedQuery = em.createNamedQuery("User.getAll", User.class); return namedQuery.getResultList(); } } Сущность: @Entity @Table(name = "annusers") @NamedQuery(name = "User.getAll", query = "SELECT u FROM User u") public class User { @Id @SequenceGenerator(name="ad_point_gen",allocationSize=1,sequenceName="ad_points_id_ad_point_seq") @GeneratedValue(generator="ad_point_gen",strategy=GenerationType.SEQUENCE) @Column(name = "id", nullable = false) private Integer id; @Column(name = "login", nullable = false) private String login; @Column(name = "password", nullable = false) private String password; @Column(name="username", nullable = false) private String username; public User() { } public User(String login, String password, String username) { this.login = login; this.password = password; this.username = username; } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "login='" + login + '\'' + ", password='" + password + '\'' + ", username='" + username + '\'' + '}'; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } Классы сервлетов для работы с CRUD операциями @WebServlet("/add") public class AddAndEditUserServlet extends HttpServlet{ @EJB private UserLogIn userLogIn; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ resp.setContentType("text/html"); req.setCharacterEncoding("UTF-8"); if(req.getParameter("edit")!=null){ int id = Integer.valueOf(req.getParameter("edit")); User user = userLogIn.getUser(id); req.setAttribute("user",user); } req.getRequestDispatcher("/add.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ resp.setContentType("text/html"); req.setCharacterEncoding("UTF-8"); String login = req.getParameter("login"); String password = req.getParameter("password"); String username = req.getParameter("username"); if(!req.getParameter("id").equals("")){ int id = Integer.valueOf(req.getParameter("id")); User user = userLogIn.getUser(id); user.setLogin(login); user.setPassword(password); user.setUsername(username); userLogIn.update(user); }else { userLogIn.add(new User(login, password,username)); } resp.sendRedirect("list"); } } package com.mkyong.rest.servlet; @WebServlet("/delete") public class DeleteUser extends HttpServlet { @EJB private UserLogIn userLogIn; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if(req.getParameter("id") != null && req.getParameter("id") != ""){ int id = Integer.valueOf(req.getParameter("id")); userLogIn.delete(id); } resp.sendRedirect("list"); } } @WebServlet("/list") public class UserServlet extends HttpServlet{ @EJB private UserLogIn userLogIn; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ List allUsers = userLogIn.getAll(); req.setAttribute("users", allUsers); req.getRequestDispatcher("/list.jsp").forward(req,resp); } }
Ответы
Ответ 1
rest сервисы, как правило нужны для CRUD операций(создание, удаление, редактирование, удаление).например: @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ ListallUsers = userLogIn.getAll(); req.setAttribute("users", allUsers); req.getRequestDispatcher("/list.jsp").forward(req,resp); } для запроса /list делает из бд выборку всех пользователей и перенаправляет запрос в list.jsp, где отображается список пользователей. Все что пришло от клиента, находится в объекте класса HttpServletRequest, например: req.getParameter("id") содержит http параметр id Update. Если делать именно рестовский сервис, то надо подключить библиотеку jackson для xml и GSON для json.в методе вместо resp.sendRedirect("list"); возвращаете свой объект, например: @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ List allUsers = userLogIn.getAll(); //.. String json = new Gson().toJson(allUsers); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(json); } Ответ 2
Вот так будет выглядеть метод rest-сервиса, который выводит приветствие. Импорты из пакета javax.ws.rs @POST @Path("/test-rest-service") @Produces(MediaType.TEXT_PLAIN) @Consumes(MediaType.TEXT_PLAIN) Response testMethod(String req) { String resp = "Hello " + req; return Response.status(200).entity(resp).encoding("UTF-8").build(); }
Комментариев нет:
Отправить комментарий