рд╣рдо рдЬрд╛рд╡рд╛ рдореЗрдВ рд░реЗрд╕реНрдЯрдлреБрд▓ рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ

рд╕рднреА рд╣рдмреНрд░реЛрдЬрд╝рд┐рдЯреЗрд▓ рдХреЛ рд╢реБрдн рджрд┐рди!

рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рдерд╛ рдХрд┐, рдореЗрд░реЗ рдмрдбрд╝реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рдХрд╛рд░рдг, рдореБрдЭреЗ рд╣реИрдмрд░ рдкрд░ рдПрдХ рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЬрд╛рд╡рд╛ рдореЗрдВ рд░реЗрд╕реНрдЯрдлреБрд▓ рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╢рд╛рдпрдж, рдореИрдВрдиреЗ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдЦреЛрдЬрд╛ред рд╣рд╛рдВ, рд░реЗрд╕реНрдЯрдлреБрд▓ рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдРрд╕рд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде, рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛ рдХреЛ рдвреВрдВрдврдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рд╣рдм рдкрд░ рд╣реА рдирд╣реАрдВ ...

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ REST рд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдорд┐рд▓рд╛, рдПрдХ рдорд╣реАрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдкрд╣рд▓реЗ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рд▓рд╛рд╣, рд╕реБрдзрд╛рд░ рдФрд░ рдЖрд▓реЛрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛!

рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдо рддреМрд░ рдкрд░ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд╛рди рдкреЛрд╕реНрдЯ рдореБрдЭреЗ рдмрд╣реБрдд рдорджрдж рдХрд░реЗрдЧреА рдФрд░ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдд рддреЗрдЬ рдХрд░реЗрдЧреА! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдПрдХ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ рдФрд░ рд╕рд┐рд░реНрдл рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдХрднреА рдирд╣реАрдВ рдЫреБрдЖред

рдореЗрд░реА рдкрд╣рд▓реА рдзрд╛рд░рдгрд╛ рдореЗрдВ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдмрд╛рдд рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ XML рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдареАрдХ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдореБрдЭреЗ SOAP рдФрд░ WSDL рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рдж рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдЦреИрд░, рд╣рд╛рдВ, рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕рдиреЗ рдХрдо рд╕реЗ рдХрдо рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдЬреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдореИрдВ рдХрдЯреМрддреА рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ

рдЖрдЗрдП, рд╣рдо рддреБрд░рдВрдд рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ:

1. рдмреЗрд╢рдХ, рдЖрдк рд▓реЗрдЦ рдореЗрдВ рд╕рднреА рдХреЛрдб рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдмрддрд╛рдПрдВрдЧреЗ;
2. рдкреНрд░рдХреНрд╖реЗрдкрдг рд╕рдВрд╕реНрдХрд░рдг, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЕрдВрддрд┐рдо рдирд╣реАрдВ рд╣реИ рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛ рдерд╛ - рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛;
3. рдмреЗрд╢рдХ, рдХреАрдбрд╝реЗ рд╣реИрдВред

рдФрд░ рд╣рд╛рдВ, рдЪрд▓реЛ рдХреНрд░рдо рдореЗрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

1. рдкреНрд░рдпреБрдХреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░:


рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪреБрдирд╛ рдЧрдпрд╛ - рдЬрд┐рддрдирд╛ рд╕рд░рд▓ рдЙрддрдирд╛ рд╣реА рдмреЗрд╣рддрд░ред рд╣рд╛рдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд▓реЛрдб рдХреА рдЧрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП MySQL рдХреЗ рдмрдЬрд╛рдп, MongoDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдареАрдХ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдирдкреБрдЯ рд╕рдорд╛рди JSON рд╣реИ ред

2. рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреНрдпрд╛ рдХрд░реЗрдЧреА - рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рд╣реИ: рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧреА - рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ, рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, рдЗрд╕реЗ рд╣рдЯрд╛рдПрдВ рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕реВрдЪреА рдпрд╛ рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдмреЗрд╢рдХ, рдореИрдВ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП "рд╕реБрдВрджрд░" URL рдмрдирд╛рдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЛ рдЬрдХрдбрд╝рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрд╡рд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛, рдпрд╛ рдХреБрдЫ рдФрд░ рдХрд░рдирд╛ред рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдареАрдХ рд╣реИ, рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдВред

рджрд░рдЕрд╕рд▓, рдкреНрд▓реЗрдЯ:

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 ) 


WS рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ:

  1.http: //mysite.com/service/customer 

  2. http://mysite.com/service/customer/unningid} 


4 рдорд╛рдирдХ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВрдЧреЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣рдорд╛рд░реА рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ - рд╣рдорд╛рд░реА рддреНрд░реБрдЯрд┐ рдХреЛрдб):

200 - рд╕рдлрд▓;
401 - рдЕрдзрд┐рдХреГрдд рдирд╣реАрдВ;
404 - рдирд╣реАрдВ рдорд┐рд▓рд╛;
500 - рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╕рд░реНрд╡рд░ рдХреА рддреНрд░реБрдЯрд┐ред

3. рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЬреАрдереВрдм рдХреЛрдб рдпрд╣рд╛рдВ ):

рд╣рд╛рдБ, рдХреЛрдб, рдХрдо рд╕реЗ рдХрдо рдЯрд┐рдкреНрдкрдгреА рдХреА, рдпрд╣рд╛рдБ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рд╡рд┐рд╡рд░рдгред

рд╕реНрд╡рдпрдВ рд╡реЗрдм рд╕реЗрд╡рд╛рдПрдБ:
 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()); } } } 


рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╕рд░рд▓ рд╣реИ - рдпреВрдЖрд░рдЖрдИ рдФрд░ рдЬрд┐рд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдпрд╣ рдпреВрдЖрд░рдЖрдИ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ 4 рд╡реЗрдм рд╕реЗрд╡рд╛рдПрдВ, рдПрдХ рдбреАрдПрдУ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рдмреАрдиреНрд╕ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред рдПрдХреНрд╕рдПрдордПрд▓ рдФрд░ рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╕рдВрд╕реНрдХрд░рдг рд╣реЗрдбрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗред

рд╕реЗрд╡рд╛ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛ рдЪреАрдЬ рдкреВрд░реА рд╣реЛрддреА рд╣реИ рдЙрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ:
 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)); } } } 


рдпрд╣рд╛рдВ, рдорд╛рдиреНрдп () рд╡рд┐рдзрд┐ рдореЗрдВ, рдЖрдк рдХреБрдЫ рдкреВрд░реНрд╡ рд╢рд░реНрдд рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдЕрдиреБрд░реЛрдз рд╕рддреНрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ "ss_id" рдореЗрдВ рдХрд╕реНрдЯрдо рд╣реЗрдбрд░ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдареАрдХ рд╣реИ, рдкрд╣рд▓реА рдмрд╛рд░ 401 рднреА рдЗрд╕ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдбреНрд░реЙрдк рд╣реЛрдЧрд╛ред

рд╕рд╛рдорд╛рдиреНрдп рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░:
 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()); } } 


рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХреЛрдб рд╣реИ, рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рддрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдФрд░ рд╣рдорд╛рд░реЗ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдПрдирдо рд╣реИред рд╣рд╛рдБ, рддреИрдирд╛рддреА рд╡рд┐рд╡рд░рдгрдХ рдФрд░ рд╕реЗрдоред Xml рдЕрднреА рднреА рдпрд╣рд╛рдБ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

web.xml:
 ... <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> 


рдпрд╣рд╛рдВ, рдореБрдЦреНрдп рд░реБрдЪрд┐ рдЕрдкрд╛рдЪреЗ - рд╕реАрдПрдХреНрд╕рдПрдлрд╕рд░реНрд╡рд▓реЗрдЯ рдФрд░ рдПрдХреНрд╢рди рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯреЗрд▓реИрдбреЗрд░рд▓реАрдирд░ рд╕реЗ рдПрдХреНрд╢рди рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

beans.xml:
 ... <!-- 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> ......... 


рдпрд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рд╕реАрдПрдХреНрд╕рдПрдл рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдбреАрдПрдУ рдСрдмреНрдЬреЗрдХреНрдЯ, рд╣рдорд╛рд░реЗ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕реЗрд╡рд╛ рдмреАрди рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд░реВрдЯ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдХреНрд░реЛрдо рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ REST рдХрдВрд╕реЛрд▓ 4.0.2 рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЪрд┐рдХреЛрдЯреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП - рдмрд╛рдд рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ, рдХрд╕реНрдЯрдо рд╣реЗрдбрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ "ss_id" 401 рдХреЗ рдмрд┐рдирд╛ рд╣рдореЗрд╢рд╛ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛) рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп:
 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" }, .......... 


рдФрд░ рдЖрдЦрд┐рд░реА, рдореИрдВ рдПрдХ "рд╕реБрдВрджрд░" рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд╣рдо рдмреЗрд╣рддрд░ рдпрд╣ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ URL рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ, рдЖрдк server.xml рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ urlRewrite рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╣рдорд╛рд░реЗ рд╡реЗрдм рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХрд╛рди рдореЗрдВ рдкреИрдХ рдХрд░рдирд╛ рдФрд░ application.xml рдореЗрдВ рд╣рдорд╛рд░реА рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд░реВрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред

рдкреБрдирд╢реНрдЪ: рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреЛрд╕реНрдЯ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА рдЬреЛ рдЬрд╛рд╡рд╛ рд░реЗрд╕реНрдЯрдлреБрд▓ рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА рд▓реЛрдЧ рд╕рд▓рд╛рд╣ рдФрд░ рдЖрд▓реЛрдЪрдирд╛ рдХрд░реЗрдВрдЧреЗ!

Source: https://habr.com/ru/post/In150034/


All Articles