如何在Spring MVC Controller中使用@Inject?

时间:2014-06-10 23:21:36

标签: java spring spring-mvc

我正在使用Spring MVC控制器。我有一个控制器DataController

我正在考虑使用HttpServletRequestDataController类的顶部添加@Inject作为注射剂。

@Controller
public class DataController {

    @Inject
    HttpServletRequest request;

    // .. some code here

    @RequestMapping(value = "process", method = RequestMethod.GET)
    public @ResponseBody
    DataResponse processTask(@RequestParam("workflow") final String workflow) {

        String ipAddress = request.getRemoteAddr();
        System.out.println(ipAddress);

}

所以我的问题是 - 这是使用@Inject的正确方法吗?我之前从未使用过@Inject,因此试图了解我的做法是否正确?从每次调用processTask方法开始,我都需要获取正在调用processTask方法的ipAddress。

2 个答案:

答案 0 :(得分:0)

在获取HttpServletRequest 方面:从语义上讲,这绝对是错误的。

原因HttpServletRequest是仅在用户发送请求时创建的对象,并在请求的用户操作完成后销毁。你只需要以这种方式存储它(从语法角度),但你不应该(从语义角度)。您需要意识到Web应用程序的工作方式与桌面应用程序不完全相同(并且不要从同一角度观察它们)。

<强>建议

@RequestMapping(value = "process", method = RequestMethod.GET)
public @ResponseBody
DataResponse processTask(@RequestParam("workflow") final String workflow, HttpServletRequest request) {...}

这样,每次调用processTask方法时,您都会收到相应的请求。 (HttpServletRequest对象由@RequestMapping注入。)

(如果您希望在会话中保留一些内容,请考虑使用

的bean

建议
@Inject private UserService userService;
(假设我们有一个名为UserService的类。)

答案 1 :(得分:-1)

你不能注射&#34;就我所知,HttpServletRequest使用它的唯一方法是添加为方法成员。像这样:

@Controller
public class DataController {



    // .. some code here

    @RequestMapping(value = "process", method = RequestMethod.GET)
    public @ResponseBody
    DataResponse processTask(@RequestParam("workflow") final String workflow,HttpServletRequest request) {

        String ipAddress = request.getRemoteAddr();
        System.out.println(ipAddress);

}

同时查看Spring MVC @AutoWired response not working