springmvc 使用 response 的注意事项以及解决500 空指针异常找不到 response 的方法

 

 

 

使用注解方式在类中(Controller)来装载request时,是可以正常使用request的(必须在启动时才注入,所以不支持热部署),但是同样使用这种方式在已经装载了 request的情况下装载 response时却导致找不到response 500 空指针异常

    @Autowired
    HttpServletRequest request;

因为Request 和 Response 都是针对一次请求的

如果只用@Autowired 或者 @Resource 注解,依赖都是在应用启动时注入的,当应用启动的时候请求还没来,所以还没有 Request和Response对象。
所以当需要Request 和Response对象时,需要将其放到controller的方法的参数中,这样每次请求时,Spring MVC框架就会自动将HttpServeletRequest 或 HttpServeletResponse对象注入。

Request对象表示一次请求,里面包含了本次请求的所有信息,包括Http Header和 Body,
Response对象表示对请求的响应,可以设置响应的header和body

 

但是如果要使用 response,那么就不要在类中(Controller)使用 @Autowired 来装载 request 或者 request 和 response,前者是为了避免在方法中传入 request和response时起冲突,后者是因为这样装载的response是不能使用的,所以在springmvc中使用response要满足以下条件:

1. 不要使用 @Autowired 来装载 request 或者 request 和 response

2. 因为@Autowired 不支持热部署,所以对 request和response的修改不能实时查看,所以在需要修改并实时查看的场景不使用 @Autowired 来装载 request 或者 request 和 response

3. 必须同时在方法中传入 request 和 response,像这样

    public ModelAndView showRepoByUidForPager(PageInfo<RepoEntity> pi,HttpServletRequest request,HttpServletResponse response){

如果是用的 @Autowired 来装载的 request,用方法注入的 response,或者 request和response都是用 @Autowired 来装载的,这些情况下都会导致 500,空指针异常,即找不到 response,所以必须同时在方法中传入 request 和 response,这样就可以正常使用 response和request了。

 

posted @ 2018-05-11 13:42  由良大小姐  阅读(821)  评论(0编辑  收藏  举报