Существует множество хороших основанных на 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
Примечание. Ваш путь может отличаться в зависимости от того, как вы его настроили и развернули.