

Table of Contents
1. Overview
This article is about Spring MVC read HTTP Request header in Spring boot Rest Service or Spring MVC Controller. @RequestHeader
is a annotation using that we can read individual healer or all request headers information with name and value inside the Controller or RestController. We have also explained about to read header information using our traditional ways HttpServletRequest
.
2. Different ways to Read HTTP Request header / @RequestHeader Examples
2.1 Spring MVC read header using @RequestHeader
@RequestHeader
is a Spring MVC web annotation using that we can read HTTP header information. it requires header name as a parameter, Here is an example for same:
@RestController public class EmployeeController { @RequestMapping("/getEmployees") public List<Employee> getEmployees(@RequestHeader(HttpHeaders.ACCEPT)String accept, @RequestHeader(HttpHeaders.USER_AGENT)String userAgent) { System.out.println(accept); // it will print 'Accept' header System.out.println(userAgent); // it will print 'User-Agent' header return Employee.getEmployee(); } }
Output:
http://localhost:8282/getEmployees
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
2.2 Spring MVC read all headers
@RequestHeader annotation without any parameter will return all the header information. Here is an example for the same:
@RestController public class EmployeeController { @RequestMapping("/getEmployees") public List<Employee> getEmployees(@RequestHeader HttpHeaders httpHeaders) { httpHeaders.forEach((headerName, HeaderValue) -> { System.out.println("Header Name:"+headerName + ", Header Value:"+HeaderValue); }); return Employee.getEmployee(); } }
Output:
http://localhost:8282/getEmployees
Header Name:host, Header Value:[localhost:8282] Header Name:connection, Header Value:[keep-alive] Header Name:cache-control, Header Value:[max-age=0] Header Name:upgrade-insecure-requests, Header Value:[1] Header Name:user-agent, Header Value:[Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36] Header Name:accept, Header Value:[text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8] Header Name:accept-encoding, Header Value:[gzip, deflate, br] Header Name:accept-language, Header Value:[en-US,en;q=0.9]
2.3 Spring MVC read the custom header
@RequestHeader
requires any header whether it should predefine header names or custom header name. @RequestHeader
also allowed defaultValue
so if the header is not available in the request then it will take a default value. required
where true means header is compulsory in request otherwise Spring will not accept the request, false means header is Optional.
@RestController public class EmployeeController { @RequestMapping("/getEmployees") public List<Employee> getEmployees(@RequestHeader(value = "My-Custom-Header", required = true)String myCustomHeader, @RequestHeader(HttpHeaders.USER_AGENT)String userAgent) { System.out.println(myCustomHeader); System.out.println(userAgent); return Employee.getEmployee(); } }
If My-Custom-Header
header is not available in the request then it will throw an exception like:
Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sun Sep 09 12:37:51 IST 2018 There was an unexpected error (type=Bad Request, status=400). Missing request header 'My-Custom-Header' for method parameter of type String
http://localhost:8282/getEmployees
using POSTMan tool with custom headers:

Spring MVC custom header
Output:
Java Developer Zone Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
2.4 Read Header Using HttpServletRequest
HttpServletRequest
is class which contains all the information about request including headers.
- HttpServletRequest.getHeader(HEADER_NAME) is method requires header name as parameter and return header value as
String
. - HttpServletRequest.getHeaderNames() will return names of all the header which are available in request. It will return
Enumeration
which contains all header name and once we have header name then we can get header value usingHttpServletRequest.getHeader()
method.
@RestController public class EmployeeController { @RequestMapping("/getEmployees") public List<Employee> getEmployees(HttpServletRequest httpRequest) { System.out.println(httpRequest.getHeader("Accept")); // fetch single header Enumeration<String> enumeration = httpRequest.getHeaderNames(); // fetch header names while (enumeration.hasMoreElements()){ // print all headers String headerName = enumeration.nextElement(); System.out.println("Header Name:"+headerName + ", Header Value:"+ httpRequest.getHeader(headerName)); } return Employee.getEmployee(); } }
3. Conclusion
In this article, we learned different ways to read the header information using @RequestHeader
annotation and it’s part of spring web so in spring boot application if spring boot web dependency is included then we can use in spring boot application also. And we learn that how spring web make our code easy using annotations.
4. References