

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
Enumerationwhich 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
