Skip to content

Commit efacf14

Browse files
Reading header in spring boot using @RequestHeader annotation
1 parent 6ed31ac commit efacf14

File tree

4 files changed

+199
-76
lines changed

4 files changed

+199
-76
lines changed

pom.xml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,20 @@
2323
<dependency>
2424
<groupId>org.springframework.boot</groupId>
2525
<artifactId>spring-boot-starter-web</artifactId>
26-
<exclusions>
26+
<!-- Exclude tomcat -->
27+
<!-- <exclusions>
2728
<exclusion>
2829
<groupId>org.springframework.boot</groupId>
2930
<artifactId>spring-boot-starter-tomcat</artifactId>
3031
</exclusion>
31-
</exclusions>
32+
</exclusions> -->
3233
</dependency>
33-
<dependency>
34+
35+
<!-- Unblock to enable jetty server -->
36+
<!-- <dependency>
3437
<groupId>org.springframework.boot</groupId>
3538
<artifactId>spring-boot-starter-jetty</artifactId>
36-
</dependency>
39+
</dependency> -->
3740

3841
<dependency>
3942
<groupId>org.projectlombok</groupId>
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package com.javaprogram.api;
2+
3+
import java.util.Map;
4+
import java.util.Map.Entry;
5+
import java.util.stream.Collectors;
6+
import java.util.Set;
7+
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
import org.springframework.http.HttpHeaders;
11+
import org.springframework.http.HttpStatus;
12+
import org.springframework.http.ResponseEntity;
13+
import org.springframework.util.MultiValueMap;
14+
import org.springframework.web.bind.annotation.GetMapping;
15+
import org.springframework.web.bind.annotation.RequestHeader;
16+
import org.springframework.web.bind.annotation.RequestMapping;
17+
import org.springframework.web.bind.annotation.RestController;
18+
19+
@RestController
20+
@RequestMapping("request/headers")
21+
public class RequestHeadersAPI {
22+
Logger logger = LoggerFactory.getLogger(RequestHeadersAPI.class);
23+
24+
// individual headers.
25+
@GetMapping("individual/country")
26+
public ResponseEntity<String> getHeaderFromLocale(@RequestHeader(value = "locale") String locale) {
27+
logger.info("getmapping for request hreaders : " + locale);
28+
29+
String country = "USA is leading country in the world.";
30+
if (locale.equals("IN")) {
31+
country = "India";
32+
} else if (locale.equals("UK")) {
33+
country = "United Kingdom";
34+
} else if (locale.equals("AUS")) {
35+
country = "Australia";
36+
} else if (locale.equals("IT")) {
37+
country = "Italiy";
38+
}
39+
40+
String response = "Country for the given locale " + locale + " is " + country;
41+
if (locale.trim().length() == 0) {
42+
response = country;
43+
}
44+
45+
return new ResponseEntity<String>(response, HttpStatus.OK);
46+
}
47+
48+
@GetMapping("individual/phonenumnber")
49+
public ResponseEntity<String> getHeaderNumberValue(@RequestHeader(value = "phone-number") long phoneNumber) {
50+
logger.info("getmapping for request hreaders : " + phoneNumber);
51+
boolean isValidNumber = false;
52+
if (String.valueOf(phoneNumber).length() == 10) {
53+
isValidNumber = true;
54+
}
55+
56+
String response = "Given phone number " + phoneNumber + " is " + (isValidNumber ? "valid" : "invalid");
57+
58+
return new ResponseEntity<String>(response, HttpStatus.OK);
59+
}
60+
61+
// All headers once
62+
63+
@GetMapping("allheaders/map")
64+
public ResponseEntity<String> getAllHeadersAsMap(@RequestHeader Map<String, String> allHeaders) {
65+
66+
logger.info("All headers are");
67+
Set<Entry<String, String>> entrySet = allHeaders.entrySet();
68+
69+
StringBuffer buffer = new StringBuffer();
70+
71+
buffer.append("header count " + allHeaders.size() + " \n");
72+
for (Entry<String, String> e : entrySet) {
73+
logger.info("Header " + e.getKey() + "= " + e.getValue());
74+
buffer.append("Header " + e.getKey() + "= " + e.getValue() + " \n");
75+
}
76+
77+
return new ResponseEntity<String>(buffer.toString(), HttpStatus.OK);
78+
}
79+
80+
@GetMapping("allheaders/multimap")
81+
public ResponseEntity<String> getAllHeadersAsMultiMap(@RequestHeader MultiValueMap<String, String> allHeaders) {
82+
83+
logger.info("All headers with MultiValueMap");
84+
85+
// StringBuffer
86+
StringBuffer localeBuffer = new StringBuffer();
87+
88+
allHeaders.forEach((k, v) -> {
89+
logger.info(k + " = value = " + v.stream().collect(Collectors.toList()));
90+
91+
if (k.equals("locale")) {
92+
localeBuffer.append(v);
93+
}
94+
95+
});
96+
97+
return new ResponseEntity<String>("Repeated header : " + localeBuffer.toString(), HttpStatus.OK);
98+
}
99+
100+
@GetMapping("allheaders/httpheaders")
101+
public ResponseEntity<String> getAllHeadersAsHttpHeaders(@RequestHeader HttpHeaders allHttpHeaders) {
102+
103+
logger.info("All headers with MultiValueMap");
104+
StringBuffer httpBuffer = new StringBuffer();
105+
106+
String firstValue = allHttpHeaders.getFirst("locale");
107+
108+
String hostName = allHttpHeaders.getHost().getHostName();
109+
110+
int port = allHttpHeaders.getHost().getPort();
111+
112+
httpBuffer.append(" first value of locale : " + firstValue).append("\nhost name : " + hostName)
113+
.append("\nport : " + port);
114+
115+
return new ResponseEntity<String>("HttpHeaders response: " + httpBuffer.toString(), HttpStatus.OK);
116+
}
117+
118+
@GetMapping("individual/requried")
119+
public ResponseEntity<String> mandateHeader(@RequestHeader(value = "locale", required = true) String locale) {
120+
121+
return new ResponseEntity<String>(locale, HttpStatus.OK);
122+
}
123+
124+
@GetMapping("individual/default")
125+
public ResponseEntity<String> Header(@RequestHeader(value = "locale", defaultValue = "USA") String locale) {
126+
127+
return new ResponseEntity<String>(locale, HttpStatus.OK);
128+
}
129+
130+
}

src/main/java/com/javaprogram/springbootapp/SpringBootAppApplication.java

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,30 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5-
import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory;
6-
import org.springframework.boot.web.server.ErrorPage;
7-
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
8-
import org.springframework.context.annotation.Bean;
9-
import org.springframework.http.HttpStatus;
10-
5+
import org.springframework.context.annotation.ComponentScan;
116

7+
@ComponentScan("com")
128
@SpringBootApplication
139
public class SpringBootAppApplication {
1410

1511
public static void main(String[] args) {
1612
SpringApplication.run(SpringBootAppApplication.class, args);
1713
}
18-
14+
1915
/*
20-
21-
public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory() {
22-
JettyEmbeddedServletContainerFactory jettyContainer =
23-
new JettyEmbeddedServletContainerFactory();
24-
25-
jettyContainer.setPort(9000);
26-
jettyContainer.setContextPath("/home");
27-
return jettyContainer;
28-
}
16+
*
17+
* public JettyEmbeddedServletContainerFactory
18+
* jettyEmbeddedServletContainerFactory() { JettyEmbeddedServletContainerFactory
19+
* jettyContainer = new JettyEmbeddedServletContainerFactory();
20+
*
21+
* jettyContainer.setPort(9000); jettyContainer.setContextPath("/home"); return
22+
* jettyContainer; }
23+
*
24+
*/
2925

30-
*/
31-
32-
@Bean
33-
public ConfigurableServletWebServerFactory webServerFactory()
34-
{
35-
JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
36-
factory.setPort(9000);
37-
factory.setContextPath("/myapp");
38-
factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/notfound.html"));
39-
return factory;
40-
}
26+
// @Bean public ConfigurableServletWebServerFactory webServerFactory() {
27+
// JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
28+
// factory.setPort(9000); factory.setContextPath("/myapp");
29+
// factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/notfound.html"));
30+
// return factory; }
4131
}
Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,45 @@
1-
#Jetty Configurations
2-
3-
server.port=8082
4-
server.servlet.context-path=/home
5-
server.jetty.acceptors=1
6-
#Number of acceptor threads to use. When the value is -1.
7-
8-
server.jetty.accesslog.append=false
9-
# Append to log.
10-
11-
server.jetty.accesslog.date-format=dd/MMM/yyyy:HH:mm:ss Z
12-
# Timestamp format of the request log.
13-
14-
server.jetty.accesslog.enabled=false
15-
# Enable access log.
16-
17-
server.jetty.accesslog.extended-format=false
18-
# Enable extended NCSA format.
19-
20-
server.jetty.accesslog.file-date-format=dd/MMM/yyyy
21-
# Date format to place in a log filename.
22-
23-
server.jetty.accesslog.filename= app.log
24-
# Log filename. If not specified, logs redirect to "System.err".
25-
26-
server.jetty.accesslog.locale=IN
27-
# Locale of the request log.
28-
29-
server.jetty.accesslog.log-cookies=false
30-
# Enable logging of the request cookies.
31-
32-
server.jetty.accesslog.log-latency=false
33-
# Enable logging of request processing time.
34-
35-
server.jetty.accesslog.log-server=false
36-
# Enable logging of the request hostname.
37-
38-
server.jetty.accesslog.retention-period=31
39-
server.jetty.accesslog.time-zone=GMT
40-
# Timezone of the request log.
41-
42-
#server.jetty.max-http-post-size=200000B # Maximum size of the HTTP post or put content.
43-
# Number of selector threads to use. When the value is -1.
44-
server.jetty.selectors=2
45-
1+
##Jetty Configurations
2+
#
3+
#server.port=8082
4+
#server.servlet.context-path=/home
5+
#server.jetty.acceptors=1
6+
##Number of acceptor threads to use. When the value is -1.
7+
#
8+
#server.jetty.accesslog.append=false
9+
# # Append to log.
10+
#
11+
#server.jetty.accesslog.date-format=dd/MMM/yyyy:HH:mm:ss Z
12+
## Timestamp format of the request log.
13+
#
14+
#server.jetty.accesslog.enabled=false
15+
## Enable access log.
16+
#
17+
#server.jetty.accesslog.extended-format=false
18+
# # Enable extended NCSA format.
19+
#
20+
#server.jetty.accesslog.file-date-format=dd/MMM/yyyy
21+
## Date format to place in a log filename.
22+
#
23+
#server.jetty.accesslog.filename= app.log
24+
## Log filename. If not specified, logs redirect to "System.err".
25+
#
26+
#server.jetty.accesslog.locale=IN
27+
## Locale of the request log.
28+
#
29+
#server.jetty.accesslog.log-cookies=false
30+
## Enable logging of the request cookies.
31+
#
32+
#server.jetty.accesslog.log-latency=false
33+
## Enable logging of request processing time.
34+
#
35+
#server.jetty.accesslog.log-server=false
36+
## Enable logging of the request hostname.
37+
#
38+
#server.jetty.accesslog.retention-period=31
39+
#server.jetty.accesslog.time-zone=GMT
40+
## Timezone of the request log.
41+
#
42+
##server.jetty.max-http-post-size=200000B # Maximum size of the HTTP post or put content.
43+
## Number of selector threads to use. When the value is -1.
44+
#server.jetty.selectors=2
45+
#

0 commit comments

Comments
 (0)