In Spring Boot, you can add headers to an HTTP response by using HttpServletResponse or ResponseEntity inside a web controller

For adding headers to all HTTP responses, use HttpServletResponse inside a Filter implementation along with using @WebFilter and @Component annotations

Add headers to a specific response inside a web controller

Declare an HttpServletResponse parameter in your controller request mapping and use setHeader(name, value) method

import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.GetMapping;  
import javax.servlet.http.HttpServletResponse;

@Controller
public class WebController {

    @GetMapping("/viewController")
    public String viewController(HttpServletResponse response){
        response.setHeader("header name", "header value");

        return "viewName";
    }
}

You can also auto-wire HttpServletResponse as a variable

import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.beans.factory.annotation.Autowired;  
import javax.servlet.http.HttpServletResponse;

@Controller
public class WebController {  
    @Autowired
    HttpServletResponse response;

    @GetMapping("/viewController")
    public String viewController(){
        response.setHeader("header name", "header value");

        return "viewName";
    }
}

If your controller is a REST API endpoint, use ResponseEntity

import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.RestController;  
import org.springframework.http.ResponseEntity;

@RestController
public class WebController {

  @GetMapping("/restController")
  public ResponseEntity restController(){  
    return ResponseEntity.ok()
      .header("header name", "header value")
      .body("");
  }
}

Add headers to all responses with Filter

Create a new class to implement javax.servlet.Filter

import org.springframework.stereotype.Component;

import javax.servlet.*;  
import javax.servlet.annotation.WebFilter;  
import javax.servlet.http.HttpServletResponse;  
import java.io.IOException;

@WebFilter("/*")
@Component
public class ApplicationFilter implements Filter {  
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
        httpServletResponse.setHeader("header name", "header value");
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}

The @WebFilter annotation defines which URI patterns you would like to apply the filter on, the /* value represents for all URI endpoints

The @Component annotation is required to allow Spring Boot to recognize your implementation

Conclusion

In this article, we learned about adding headers to a specific and all HTTP responses in Spring Boot applications