2017-02-06 1 views
0

Я создаю API для своего веб-приложения, которое выполняется на сервере tomcat, чтобы сделать CRUD REST API, как Prestashop, но я не знать, как добавить идентификаторы таблицы в URL-адрес.Могу ли я добавить <server-mapping> во время выполнения на сервере tomcat

Так что, когда вы идете к клиентам (http://yourUrl.com/api/customers) вы получите ответ:

<prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <customers> 
     <customer id="1" xlink:href="http://yourUrl.com/api/customers/1"/> 
     <customer id="2" xlink:href="http://yourUrl.com/api/customers/2"/> 
     <customer id="3" xlink:href="http://yourUrl.com/api/customers/3"/> 
     <customer id="4" xlink:href="http://yourUrl.com/api/customers/4"/> 
     <customer id="5" xlink:href="http://yourUrl.com/api/customers/5"/> 
     <customer id="6" xlink:href="http://yourUrl.com/api/customers/6"/> 
     <customer id="7" xlink:href="http://yourUrl.com/api/customers/7"/> 
     <customer id="8" xlink:href="http://yourUrl.com/api/customers/8"/> 
     <customer id="9" xlink:href="http://yourUrl.com/api/customers/9"/> 
     <customer id="10" xlink:href="http://yourUrl.com/api/customers/10"/> 
     <customer id="11" xlink:href="http://yourUrl.com/api/customers/11"/> 
    </customers> 
</prestashop> 

И тогда вы можете пойти в http://yourUrl.com/api/customers/1 тогда мой план, чтобы добавить сервлет с несколькими отображениями, я нашел как сервлеты объявлений, но не сопоставления во время выполнения.

Как это сделать?

ответ

1

Вы на правильном пути, но вам не нужно изменять web.xml каждый раз, когда вы добавляете клиента. Если вам нужно остаться с «чистыми» сервлеты, то вам лучше всего, чтобы изменить отображение в web.xml на что-то вроде:

<servlet-mapping> 
    <servlet-name>CustomerHandler</servlet-name> 
    <url-pattern>/api/customers/*</url-pattern> 
</servlet-mapping> 

Затем в сервлет (например, doGet())

protected void doGet(HttpServletRequest request, HttpServletResponse response) { 
    String pathInfo = request.getPathInfo(); 

    // process pathinfo 
} 

Ваш путь к файлу String будет тем, что приходит после путь сервлета. Так, например, если запрос «/ api/customers/8», то строка pathInfo будет «/ 8». Вам придется анализировать это, обрабатывая ошибки (например, если URL-адрес «/ api/customers/blah»). Если pathInfo имеет значение null, то после «/ api/customers» ничего не было предоставлено, и вы можете предположить, что это возвращает список клиентов с идентификаторами.

Но для информации это «старый» способ. Он будет работать, но он требует от вас немного больше работы, чем нужно. «Новый» способ - использовать JAX-RS. В этом случае вы можете определить услугу, чтобы делать то, что вы хотите. Синтаксис будет что-то вроде:

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 


@Path("/api/customers") 
public class CustomerProcessor { 

    @Path("/") 
    @Produces({ MediaType.APPLICATION_XML }) 
    @GET 
    public Response getCustomerData() { 
     // get the customer list - assume that it's a String 
     String customerXML = ...; 

     return Response.ok(customerXML).build(); 
    } 

    @Path("/{customerId}") 
    @Produces({ MediaType.TEXT_PLAIN }) # not sure of the return type 
    @GET 
    public Response getCustomer(@PathParam("customerId") Integer customerId) { 
     // customerId is set to what is on the url but you didn't parse it 
     Customer customer = getCustomer(customerId); 

     return Response.ok(customer).build(); 
    } 
} 

Обратите внимание, что у вас есть два метода, которые сопоставляются с/API/клиентов - один с и один без параметра. Это позволяет сохранить код отдельно в зависимости от того, есть ли у вас идентификатор клиента или нет.

Самая большая проблема со вторым решением заключается в том, что Tomcat не поддерживается «из коробки». Вам нужно будет добавить поддержку JAX-RS для Tomcat или переключиться на сервер, который поддерживает его (например, TomEE, Wildfly и т. Д.).

Чтобы иметь поддержку Tomcat JAX-RS, на этом есть other posts - это не страшно, но это тоже не «бесплатно».

Смежные вопросы