* BAEL-2727 Example Code

* BAEL-2801 Example code

* Change to use parent-boot-2
This commit is contained in:
Amy DeGregorio 2019-04-05 11:04:56 -04:00 committed by maibin
parent 692930f5c8
commit af4edd08fd
5 changed files with 244 additions and 0 deletions

View File

@ -0,0 +1,37 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-mvc-simple-2</artifactId>
<packaging>war</packaging>
<name>spring-mvc-simple-2</name>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-boot-2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../parent-boot-2</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
</plugin>
</plugins>
<finalName>spring-mvc-simple2</finalName>
</build>
</project>

View File

@ -0,0 +1,11 @@
package com.baeldung.spring;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

View File

@ -0,0 +1,97 @@
package com.baeldung.spring.headers.controller;
import java.net.InetSocketAddress;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ReadHeaderRestController {
private static final Log LOG = LogFactory.getLog(ReadHeaderRestController.class);
@GetMapping("/")
public ResponseEntity<String> index() {
return new ResponseEntity<String>("Index", HttpStatus.OK);
}
@GetMapping("/greeting")
public ResponseEntity<String> greeting(@RequestHeader(value = "accept-language") String language) {
String greeting = "";
String firstLanguage = (language.length() > 1 ? language.substring(0, 2) : language);
switch (firstLanguage) {
case "es":
greeting = "Hola!";
break;
case "de":
greeting = "Hallo!";
break;
case "fr":
greeting = "Bonjour!";
break;
case "en":
default:
greeting = "Hello!";
break;
}
return new ResponseEntity<String>(greeting, HttpStatus.OK);
}
@GetMapping("/double")
public ResponseEntity<String> doubleNumber(@RequestHeader("my-number") int myNumber) {
return new ResponseEntity<String>(
String.format("%d * 2 = %d", myNumber, (myNumber * 2)),
HttpStatus.OK);
}
@GetMapping("/listHeaders")
public ResponseEntity<String> listAllHeaders(@RequestHeader Map<String, String> headers) {
headers.forEach((key, value) -> {
LOG.info(String.format("Header '%s' = %s", key, value));
});
return new ResponseEntity<String>(String.format("Listed %d headers", headers.size()), HttpStatus.OK);
}
@GetMapping("/multiValue")
public ResponseEntity<String> multiValue(@RequestHeader MultiValueMap<String, String> headers) {
headers.forEach((key, value) -> {
LOG.info(String.format("Header '%s' = %s", key, value.stream().collect(Collectors.joining("|"))));
});
return new ResponseEntity<String>(String.format("Listed %d headers", headers.size()), HttpStatus.OK);
}
@GetMapping("/getBaseUrl")
public ResponseEntity<String> getBaseUrl(@RequestHeader HttpHeaders headers) {
InetSocketAddress host = headers.getHost();
String url = "http://" + host.getHostName() + ":" + host.getPort();
return new ResponseEntity<String>(String.format("Base URL = %s", url), HttpStatus.OK);
}
@GetMapping("/nonRequiredHeader")
public ResponseEntity<String> evaluateNonRequiredHeader(
@RequestHeader(value = "optional-header", required = false) String optionalHeader) {
return new ResponseEntity<String>(
String.format("Was the optional header present? %s!", (optionalHeader == null ? "No" : "Yes")),
HttpStatus.OK);
}
@GetMapping("/default")
public ResponseEntity<String> evaluateDefaultHeaderValue(
@RequestHeader(value = "optional-header", defaultValue = "3600") int optionalHeader) {
return new ResponseEntity<String>(String.format("Optional Header is %d", optionalHeader), HttpStatus.OK);
}
}

View File

@ -0,0 +1,13 @@
package com.baeldung;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import com.baeldung.spring.Application;
@SpringBootTest(classes = Application.class)
public class AppContextIntegrationTest {
@Test
public void contextLoads() {
}
}

View File

@ -0,0 +1,86 @@
package com.baeldung.headers.controller;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import com.baeldung.spring.headers.controller.ReadHeaderRestController;
@SpringJUnitWebConfig(ReadHeaderRestControllerIntegrationTest.Config.class)
@ExtendWith(SpringExtension.class)
public class ReadHeaderRestControllerIntegrationTest {
private static final Log LOG = LogFactory.getLog(ReadHeaderRestControllerIntegrationTest.class);
@Configuration
static class Config {
}
private MockMvc mockMvc;
@BeforeEach
public void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(new ReadHeaderRestController())
.build();
}
@Test
public void whenGetRequestSentToAllHeaders_thenStatusOkAndTextReturned() throws Exception {
mockMvc.perform(get("/listHeaders").header("my-header", "Test"))
.andExpect(status().isOk())
.andExpect(content().string("Listed 1 headers"));
}
@Test
public void whenGetRequestSentToMultiValue_thenStatusOkAndTextReturned() throws Exception {
mockMvc.perform(get("/multiValue").header("my-header", "ABC", "DEF", "GHI"))
.andExpect(status().isOk())
.andExpect(content().string("Listed 1 headers"));
}
@Test
public void whenGetRequestSentToGreeting_thenStatusOKAndGreetingReturned() throws Exception {
mockMvc.perform(get("/greeting").header("accept-language", "de"))
.andExpect(status().isOk())
.andExpect(content().string("Hallo!"));
}
@Test
public void whenGetRequestSentToDouble_thenStatusOKAndCorrectResultReturned() throws Exception {
mockMvc.perform(get("/double").header("my-number", 2))
.andExpect(status().isOk())
.andExpect(content().string("2 * 2 = 4"));
}
@Test
public void whenGetRequestSentToGetBaseUrl_thenStatusOkAndHostReturned() throws Exception {
mockMvc.perform(get("/getBaseUrl").header("host", "localhost:8080"))
.andExpect(status().isOk())
.andExpect(content().string("Base URL = http://localhost:8080"));
}
@Test
public void whenGetRequestSentToNonRequiredHeaderWithoutHeader_thenStatusOKAndMessageReturned() throws Exception {
mockMvc.perform(get("/nonRequiredHeader"))
.andExpect(status().isOk())
.andExpect(content().string("Was the optional header present? No!"));
}
@Test
public void whenGetRequestSentToDefaultWithoutHeader_thenStatusOKAndMessageReturned() throws Exception {
mockMvc.perform(get("/default"))
.andExpect(status().isOk())
.andExpect(content().string("Optional Header is 3600"));
}
}