@SpringBootApplication
public class DemoApplication
{
+ @Value("${application.name}")
+ String applicationName;
@Value("${build.version}")
String projectVersion;
@Bean
- public BackendVersionInterceptor backendVersionInterceptor()
+ public BackendVersionInterceptor backendVersionInterceptor(
+ @Value("${build.version}") String projectVersion)
{
return new BackendVersionInterceptor(projectVersion);
}
+ @Bean
+ public String from(
+ @Value("${application.name}") String applicationName,
+ @Value("${build.version}") String projectVersion)
+ {
+ return applicationName + "@" + projectVersion;
+ }
+
public static void main(String[] args)
{
SpringApplication.run(DemoApplication.class, args);
}
-
}
--- /dev/null
+package de.juplo.demo;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+
+@RequiredArgsConstructor
+@RestController
+@Slf4j
+public class DemoRestController
+{
+ public final String PLACEHOLDER_TO = "TO_NAME";
+ public final String PLACEHOLDER_FROM = "FROM_NAME";
+
+
+ private final String from;
+
+
+ @PostMapping("{to}")
+ public GreetingTO greet(
+ @PathVariable String to,
+ @RequestBody String greeting)
+ {
+ String message = greeting
+ .replaceAll(PLACEHOLDER_FROM, from)
+ .replaceAll(PLACEHOLDER_TO, to)
+ .trim();
+
+ log.info("Greeting from {} to {}: {}", from, to, message);
+
+ return GreetingTO.of(message, from, to);
+ }
+}
--- /dev/null
+package de.juplo.demo;
+
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY;
+
+
+@Data
+@AllArgsConstructor(staticName = "of")
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(NON_EMPTY)
+public class GreetingTO
+{
+ private String greeting;
+ private String from;
+ private String to;
+}
import org.springframework.test.web.servlet.MockMvc;
import static de.juplo.demo.BackendVersionInterceptor.BACKEND_VERSION;
+import static org.springframework.http.HttpHeaders.ACCEPT;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-@SpringBootTest
+@SpringBootTest(properties = { "application.name=FOO", "build.version=BAR" })
@AutoConfigureMockMvc
class DemoApplicationTests
{
.header(BACKEND_VERSION, "FOO"))
.andExpect(status().isGone());
}
+
+ @Test
+ void getGreetingIfBackendHeaderIsNotSet(@Autowired MockMvc mvc) throws Exception
+ {
+ mvc
+ .perform(post("/peter")
+ .header(ACCEPT, "application/json")
+ .header(BACKEND_VERSION, projectVersion)
+ .content("Hello TO_NAME, nice to meet you. I'm FROM_NAME."))
+ .andExpect(status().isOk())
+ .andExpect(content().json("{\"greeting\": \"Hello peter, nice to meet you. I'm FOO@BAR.\"}"));
+ }
+
+ @Test
+ void getGreetingIfBackendHeaderDoesMatch(@Autowired MockMvc mvc) throws Exception
+ {
+ mvc
+ .perform(post("/peter")
+ .header(ACCEPT, "application/json")
+ .header(BACKEND_VERSION, "FOO")
+ .content("Hello TO_NAME, nice to meet you. I'm FROM_NAME."))
+ .andExpect(status().isGone());
+ }
+
+ @Test
+ void getGreetingIfBackendHeaderDoesNotMatch(@Autowired MockMvc mvc) throws Exception
+ {
+ mvc
+ .perform(post("/peter")
+ .header(ACCEPT, "application/json")
+ .content("Hello TO_NAME, nice to meet you. I'm FROM_NAME."))
+ .andExpect(status().isOk())
+ .andExpect(content().json("{\"greeting\": \"Hello peter, nice to meet you. I'm FOO@BAR.\"}"));
+ }
}