Статьи

Создание простой службы REST с использованием среды IDE NetBeans 7, сервлета Java и JAXB

Существует множество хороших основанных на 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

Примечание. Ваш путь может отличаться в зависимости от того, как вы его настроили и развернули.

 

С http://www.giantflyingsaucer.com/blog/?p=3339