簡體   English   中英

如何為整個Spring Framework控制器發送相同的標頭?

[英]How to send same headers for whole Spring Framework controller?

具體來說,我希望整個控制器發送“ Access-Control-Allow-Origin = *”。

我在下面嘗試過,但這似乎不起作用:

@Controller
@RequestMapping(value = "/controller/base", headers="Access-Control-Allow-Origin=*")
public class UserController {
    @RequestMapping(method = RequestMethod.GET, value = "/blah", produces = application/json")
    @ResponseBody
    public Map blah(/*...,*/ HttpServletResponse response, HttpServletRequest request) throws Exception {
        //...
    }
}

只有在我明確設置(在所有方法中)這樣時,它才起作用:

response.addHeader("Access-Control-Allow-Origin", "*");

有什么辦法可以在一個地方為一個或多個控制器設置此設置?

據我所知,沒有辦法從控制器本身攔截控制器的所有方法(除了使用@InitBinder丑陋@InitBinder )。

但是,您可以創建一個HandlerInterceptor並將其應用於控制器的基本URL。 例如,使用@EnableMvc

@Configuration
@EnableWebMvc
public class MyWebConfiguration extends WebMvcConfigurerAdapter {
    ...
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(...).addPathPatterns("/controller/base/**");
    }
    ...
}

考慮將Spring 3.2中引入的@ControllerAdvice注釋與@InitBinder結合使用。

“用@ControllerAdvice注釋的類可以包含@ ExceptionHandler,@ InitBinder和@ModelAttribute方法,它們將應用於跨控制器層次結構的@RequestMapping方法,而不是聲明它們的控制器層次結構。@ControllerAdvice是允許實現類的組件注釋可以通過類路徑掃描自動檢測。”

  • @InitBinder注釋的方法中設置響應標頭。
  • @ControllerAdvice注釋該類,以使它全局處理@InitBinder。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM