Существует множество хороших основанных на Java каркасов REST для создания приложений. Рестлет , RESTEasy , Джерси и т. Д. Приходят на ум просто назвать несколько. Вам не нужна среда REST для создания простой службы REST (хотя использование среды REST — определенно отличная идея и мои личные предпочтения). Сегодня я просто покажу вам, как создать простой REST-сервис, который возвращает XML. Я просто буду использовать простой Java-сервлет и JAXB .
Примечание. Я использую среду IDE NetBeans 7 для создания этого проекта.
Я создал новое веб-приложение Maven под названием: RESTfullySimple
Как только проект будет создан, добавьте новый класс Java с именем: User
Вот код для файла User.java :
package com.giantflyingsaucer; import javax.xml.bind.annotation.XmlType; @XmlType public class User { private String firstname; private String lastname; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } }
Добавьте еще один класс в проект под названием: UserList
Этот класс создаст несколько новых пользователей через конструктор и сохранит их в списке. Вот код:
package com.giantflyingsaucer; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="userlist") public class UserList { private List<User> users; public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; } public UserList() { User user1 = new User(); user1.setAge(25); user1.setFirstname("George"); user1.setLastname("Watkins"); User user2 = new User(); user2.setAge(30); user2.setFirstname("Julie"); user2.setLastname("Joelle"); User user3 = new User(); user3.setAge(58); user3.setFirstname("Max"); user3.setLastname("Kutter"); this.users = new ArrayList<User>(); this.users.add(user1); this.users.add(user2); this.users.add(user3); } }
В каждом классе вы заметите, что я использовал несколько аннотаций, чтобы помочь JAXB: XmlType и XmlRootElement
Добавьте сервлет в проект под названием: RESTfullySimpleServlet
Ниже приведен код для нового сервлета (поскольку я использую Servlet 3, нет необходимости создавать файл web.xml для этого проекта, и вы можете удалить любые jsp-файлы по умолчанию, созданные Maven).
Примечание. См. Мою предыдущую статью об аннотациях Servlet 3, если вы с ними не знакомы.
package com.giantflyingsaucer; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; @WebServlet(name = "RESTfullySimpleServlet", urlPatterns = {"/Users"}) public class RESTfullySimpleServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/xml"); try { TransformerFactory.newInstance().newTransformer().transform( GetXML(new UserList()), new StreamResult(response.getOutputStream())); } catch(Exception ex) { throw new ServletException(ex); } } private Source GetXML(UserList userList) throws ServletException { Document document = null; try { Marshaller marshaller = JAXBContext.newInstance(UserList.class).createMarshaller(); document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); marshaller.marshal(userList, document); } catch(JAXBException jaxbex) { throw new ServletException(jaxbex); } catch(ParserConfigurationException parseex) { throw new ServletException(parseex); } return new DOMSource(document); } @Override public String getServletInfo() { return "RESTfully Simply Servlet"; } }
Вот структура проекта:
В IDE NetBeans введите команду Maven Build and Clean для проекта и затем разверните получившийся файл WAR. Я развернул мой на Tomcat 7 .
Путь к моей службе REST: http: // localhost: 8080 / RESTfullySimple-1.0-SNAPSHOT / Users
Примечание. Ваш путь может отличаться в зависимости от того, как вы его настроили и развернули.