在上篇文章的末尾,我提到资源的设计有一点问题,增加客户的功能应该放到Customers resource而不是Customer Resource。本文首先会改正这个问题。
首先把创建Customer的代码从Customer Resource移到Customers Resource,另外创建一个查询所有customer的get方法,代码如下:
- public class CustomersResource extends Resource {
- private CustomerDAO customerDAO;
- @Override
- public void init(Context context, Request request, Response response) {
- super.init(context, request, response);
- }
- public CustomersResource(){
- getVariants().add(new Variant(MediaType.TEXT_PLAIN));
- }
- public CustomersResource(Context context, Request request, Response response) {
- super(context, request, response);
- getVariants().add(new Variant(MediaType.TEXT_PLAIN));
- }
- @Override
- public Representation represent(Variant variant) {
- List<Customer> list = customerDAO.getAllCustomers();
- Representation representation = new StringRepresentation("", MediaType.TEXT_PLAIN);
- return representation;
- }
- @Override
- public boolean allowPut() {
- return true;
- }
- @Override
- public void storeRepresentation(Representation entity) throws ResourceException {
- Form form = new Form(entity);
- Customer customer = new Customer();
- customer.setName(form.getFirstValue("name"));
- customer.setAddress(form.getFirstValue("address"));
- customer.setRemarks("This is an example which receives request with put method and save data");
- customerDAO.saveCustomer(customer);
- }
- public void setCustomerDAO(CustomerDAO customerDAO) {
- this.customerDAO = customerDAO;
- }
- }
在Spring配置文件定义一个Customers resource bean,并修改URL映射部分:
- <bean id="restRoute" class="org.restlet.ext.spring.SpringRouter">
- <property name="attachments">
- <map>
- <entry key="/customers">
- <bean class="org.restlet.ext.spring.SpringFinder">
- <lookup-method name="createResource" bean="customersResource" />
- </bean>
- </entry>
- <entry key="/customers/{customerId}">
- <bean class="org.restlet.ext.spring.SpringFinder">
- <lookup-method name="createResource" bean="customerResource" />
- </bean>
- </entry>
- </map>
- </property>
- </bean>
- <bean id="customersResource" class="com.infosys.restlet.resource.CustomersResource" scope="prototype">
- <property name="customerDAO" ref="customerDAO" />
- </bean>
在CustomerResourceTest中修改测试方法:
- public static void testStoreRepresentation(){
- Client client = new Client(Protocol.HTTP);
- Reference itemsUri = new Reference("http://localhost:8080/restlet/resources/customers");
- Form form = new Form();
- form.add("name", "Ajax");
- form.add("description", "test store presentation");
- Representation rep = form.getWebRepresentation();
- Response response = client.put(itemsUri, rep);
- assertTrue(response.getStatus().isSuccess());
- }