CREATE TABLE `customer` ( `id` varchar(45) NOT NULL, `first_name` varchar(45) DEFAULT NULL, `last_name` varchar(45) DEFAULT NULL, `phone` varchar(45) DEFAULT NULL, `mail` varchar(45) DEFAULT NULL, `adress` varchar(45) DEFAULT NULL, `contract_id` varchar(45) DEFAULT NULL, `contract_expire_date` date DEFAULT NULL )
1. http://mysite.com/service/customer
2. http://mysite.com/service/customer/{id}
public class CustomersServiceJSON implements ICustomersService { // link to our dao object private ICustomersDAO customersDAO; // for customersDAO bean property injection public ICustomersDAO getCustomersDAO() { return customersDAO; } public void setCustomersDAO(ICustomersDAO customersDAO) { this.customersDAO = customersDAO; } // for retrieving request headers from context // an injectable interface that provides access to HTTP header information. @Context private HttpHeaders requestHeaders; private String getHeaderVersion() { return requestHeaders.getRequestHeader("version").get(0); } // get by id service @GET @Path("/{id}") public Response getCustomer(@PathParam("id") String id) { Customer customer = customersDAO.getCustomer(id); if (customer != null) { return ResponseCreator.success(getHeaderVersion(), customer); } else { return ResponseCreator.error(404, Error.NOT_FOUND.getCode(), getHeaderVersion()); } } // remove row from the customers table according with passed id and returned // status message in body @DELETE @Path("/{id}") public Response removeCustomer(@PathParam("id") String id) { if (customersDAO.removeCustomer(id)) { return ResponseCreator.success(getHeaderVersion(), "removed"); } else { return ResponseCreator.success(getHeaderVersion(), "no such id"); } } // create row representing customer and returns created customer as // object->JSON structure @POST @Consumes(MediaType.APPLICATION_JSON) public Response createCustomer(Customer customer) { System.out.println("POST"); Customer creCustomer = customersDAO.createCustomer(customer); if (creCustomer != null) { return ResponseCreator.success(getHeaderVersion(), creCustomer); } else { return ResponseCreator.error(500, Error.SERVER_ERROR.getCode(), getHeaderVersion()); } } // update row and return previous version of row representing customer as // object->JSON structure @PUT @Consumes(MediaType.APPLICATION_JSON) public Response updateCustomer(Customer customer) { Customer updCustomer = customersDAO.updateCustomer(customer); if (updCustomer != null) { return ResponseCreator.success(getHeaderVersion(), updCustomer); } else { return ResponseCreator.error(500, Error.SERVER_ERROR.getCode(), getHeaderVersion()); } } // returns list of customers meeting query params @GET //@Produces(MediaType.APPLICATION_JSON) public Response getCustomers(@QueryParam("keyword") String keyword, @QueryParam("orderby") String orderBy, @QueryParam("order") String order, @QueryParam("pagenum") Integer pageNum, @QueryParam("pagesize") Integer pageSize) { CustomerListParameters parameters = new CustomerListParameters(); parameters.setKeyword(keyword); parameters.setPageNum(pageNum); parameters.setPageSize(pageSize); parameters.setOrderBy(orderBy); parameters.setOrder(Order.fromString(order)); List<Customer> listCust = customersDAO.getCustomersList(parameters); if (listCust != null) { GenericEntity<List<Customer>> entity = new GenericEntity<List<Customer>>( listCust) { }; return ResponseCreator.success(getHeaderVersion(), entity); } else { return ResponseCreator.error(404, Error.NOT_FOUND.getCode(), getHeaderVersion()); } } }
public class PreInvokeHandler implements RequestHandler { // just for test int count = 0; private boolean validate(String ss_id) { // just for test // needs to implement count++; System.out.println("SessionID: " + ss_id); if (count == 1) { return false; } else { return true; } } public Response handleRequest(Message message, ClassResourceInfo arg1) { Map<String, List<String>> headers = CastUtils.cast((Map<?, ?>) message .get(Message.PROTOCOL_HEADERS)); if (headers.get("ss_id") != null && validate(headers.get("ss_id").get(0))) { // let request to continue return null; } else { // authentication failed, request the authentication, add the realm return ResponseCreator.error(401, Error.NOT_AUTHORIZED.getCode(), headers.get("version").get(0)); } } }
public class CustomExceptionMapper implements ExceptionMapper<Exception> { @Context private HttpHeaders requestHeaders; private String getHeaderVersion() { return requestHeaders.getRequestHeader("version").get(0); } public Response toResponse(Exception ex) { System.out.println(ex.getMessage() + ex.getCause()); return ResponseCreator.error(500, Error.SERVER_ERROR.getCode(), getHeaderVersion()); } }
... <web-app> <display-name>service</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/beans.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>CXFServlet</servlet-name> <display-name>CXF Servlet</display-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
... <!-- Imported resources for cxf --> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <!-- Imported bean for dao --> <import resource="classpath:META-INF/spring/dao.xml"/> <bean id="customersService" class="com.test.services.customers.rest.CustomersServiceJSON"> <property name="customersDAO" ref="customersDAO"/> </bean> <bean id="preInvokeHandler" class="com.test.services.rest.PreInvokeHandler" /> <bean id="customExceptionMapper" class="com.test.services.rest.CustomExceptionMapper" /> <jaxrs:server id="restContainer" address="/customer"> <jaxrs:serviceBeans> <ref bean="customersService" /> </jaxrs:serviceBeans> <jaxrs:providers> <ref bean="preInvokeHandler" /> <ref bean="customExceptionMapper" /> </jaxrs:providers> </jaxrs:server> .........
Request Url: http://localhost:8080/service/customer Request Method: GET Status Code: 200
Accept: application/json Content-Type: application/json ss_id: 12312.111 version: 12312.111 ........
Status Code: 200 Date: Tue, 21 Aug 2012 13:09:45 GMT Content-Length: 877 Server: Apache-Coyote/1.1 Content-Type: application/json version: 12312.111
{ "customer": [{ "id": "89ad5a46-c9a2-493f-a583-d8250ee31766", "adress": "null", "contract_id": "null", "first_name": "serg", "last_name": "serg", "mail": "serg", "phone": "null" }, { "id": "300ff688-a783-4e6a-9048-8bb625128dc0", "first_name": "serg" }, { "id": "67731ab9-87b1-4ff9-a7e4-618c1f9e8c4c", "first_name": "serg" }, { "id": "cd5039bb-031f-4697-a70c-ad3e628963dd", "first_name": "serg" }, { "id": "86da5446-7439-4242-b730-31c8b57a5c7d", "first_name": "serg" }, ..........
Source: https://habr.com/ru/post/150034/
All Articles