How to set respond header values in Spring Boot rest service method?

Viewed 74015

Newbie question... I'm building my first Spring Boot restful service. My restful service design requires some data to be returned in the response header.

How do I set response header values inside my controller class method?

4 Answers

I was looking for an answer, and I don't like to have to create a response entity. I found the solution on the spring-forums, so credits to the writer.

In short, you can request the response in the method-declaration, so this can be populated.

A simple example:

@RequestMapping(value="/car/{carId}", method = RequestMethod.Get)
@ResponseBody
public Car getCarById(@PathVariable("carId") String Id, HttpServletResponse response) {

    response.setHeader("X-Special-Header", myCar.getEcoLabel());
    //get the car
    return myCar;
}

Hope this helps others as well.

http://forum.spring.io/forum/spring-projects/web-services/102652-setting-header-values-with-spring-rest-controller

To set Response Header there are multiple ways:

  1. As mentioned by @Matias Elorriaga, you can use this to add header to single response.
  2. Or, To add header to all responses you can also add java Filters.

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;

@javax.servlet.annotation.WebFilter(urlPatterns = {"/*"})
@Component
public class ResponseHeaderFilter implements javax.servlet.Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;
        res.setHeader("My-Custom-Header", "Header-Value-Here");
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }
}

  1. Or, In Spring 5, you can also have WebFilter to add headers to all responses.

import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;

@Component
public class ResponseHeaderWebFilter implements WebFilter {

    @Override
    public Mono filter(ServerWebExchange exchange, WebFilterChain chain) {
        exchange.getResponse().getHeaders().add("My-Custom-Header", "My-Value-Here");
        return chain.filter(exchange);
    }
}

Related