1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.struts2.rest;
23
24 import com.opensymphony.xwork2.ActionInvocation;
25 import com.opensymphony.xwork2.ModelDriven;
26 import com.opensymphony.xwork2.inject.Inject;
27 import com.opensymphony.xwork2.interceptor.Interceptor;
28 import org.apache.struts2.ServletActionContext;
29 import org.apache.struts2.rest.handler.ContentTypeHandler;
30
31 import javax.servlet.http.HttpServletRequest;
32 import java.io.InputStream;
33 import java.io.InputStreamReader;
34 import java.io.Reader;
35
36 /***
37 * Uses the content handler to apply the request body to the action
38 */
39 public class ContentTypeInterceptor implements Interceptor {
40
41 private static final long serialVersionUID = 1L;
42 ContentTypeHandlerManager selector;
43
44 @Inject
45 public void setContentTypeHandlerSelector(ContentTypeHandlerManager sel) {
46 this.selector = sel;
47 }
48
49 public void destroy() {}
50
51 public void init() {}
52
53 public String intercept(ActionInvocation invocation) throws Exception {
54 HttpServletRequest request = ServletActionContext.getRequest();
55 ContentTypeHandler handler = selector.getHandlerForRequest(request);
56
57 Object target = invocation.getAction();
58 if (target instanceof ModelDriven) {
59 target = ((ModelDriven)target).getModel();
60 }
61
62 if (request.getContentLength() > 0) {
63 InputStream is = (InputStream) request.getInputStream();
64 InputStreamReader reader = new InputStreamReader(is);
65 handler.toObject((Reader) reader, target);
66 }
67 return invocation.invoke();
68 }
69
70 }