Skip to content

Commit 16da571

Browse files
committed
Sample application with a single REST controller
1 parent d6d2a35 commit 16da571

9 files changed

Lines changed: 258 additions & 0 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package pl.codeleak.samples.springbootjunit5.config;
2+
3+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
4+
import org.springframework.boot.web.client.RestTemplateBuilder;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.web.client.RestTemplate;
8+
import pl.codeleak.samples.springbootjunit5.todo.JsonPlaceholderTaskRepository;
9+
import pl.codeleak.samples.springbootjunit5.todo.TaskRepository;
10+
11+
@Configuration
12+
@EnableConfigurationProperties(JsonPlaceholderApiConfigProperties.class)
13+
public class JsonPlaceholderApiConfig {
14+
15+
private final JsonPlaceholderApiConfigProperties properties;
16+
17+
public JsonPlaceholderApiConfig(JsonPlaceholderApiConfigProperties properties) {
18+
this.properties = properties;
19+
}
20+
21+
@Bean
22+
RestTemplate restTemplate() {
23+
return new RestTemplateBuilder()
24+
.rootUri(properties.getRootUri())
25+
.build();
26+
}
27+
28+
@Bean
29+
TaskRepository taskRepository(RestTemplate restTemplate, JsonPlaceholderApiConfigProperties properties) {
30+
return new JsonPlaceholderTaskRepository(restTemplate, properties);
31+
}
32+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package pl.codeleak.samples.springbootjunit5.config;
2+
3+
import org.springframework.boot.context.properties.ConfigurationProperties;
4+
5+
import javax.validation.constraints.NotBlank;
6+
7+
@ConfigurationProperties(prefix = "json-placeholder")
8+
public class JsonPlaceholderApiConfigProperties {
9+
10+
@NotBlank
11+
private String rootUri;
12+
13+
private TodoFindAll todoFindAll;
14+
15+
public String getRootUri() {
16+
return rootUri;
17+
}
18+
19+
public void setRootUri(String rootUri) {
20+
this.rootUri = rootUri;
21+
}
22+
23+
public TodoFindAll getTodoFindAll() {
24+
return todoFindAll;
25+
}
26+
27+
public void setTodoFindAll(TodoFindAll todoFindAll) {
28+
this.todoFindAll = todoFindAll;
29+
}
30+
31+
public static class TodoFindAll {
32+
33+
private String sort;
34+
private String order;
35+
private int limit;
36+
37+
public String getSort() {
38+
return sort;
39+
}
40+
41+
public void setSort(String sort) {
42+
this.sort = sort;
43+
}
44+
45+
public String getOrder() {
46+
return order;
47+
}
48+
49+
public void setOrder(String order) {
50+
this.order = order;
51+
}
52+
53+
public int getLimit() {
54+
return limit;
55+
}
56+
57+
public void setLimit(int limit) {
58+
this.limit = limit;
59+
}
60+
}
61+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package pl.codeleak.samples.springbootjunit5.todo;
2+
3+
import org.springframework.core.ParameterizedTypeReference;
4+
import org.springframework.http.HttpMethod;
5+
import org.springframework.web.client.RestTemplate;
6+
import pl.codeleak.samples.springbootjunit5.config.JsonPlaceholderApiConfigProperties;
7+
8+
import java.util.List;
9+
10+
public class JsonPlaceholderTaskRepository implements TaskRepository {
11+
12+
private final RestTemplate restTemplate;
13+
private final JsonPlaceholderApiConfigProperties properties;
14+
15+
public JsonPlaceholderTaskRepository(RestTemplate restTemplate, JsonPlaceholderApiConfigProperties properties) {
16+
this.restTemplate = restTemplate;
17+
this.properties = properties;
18+
}
19+
20+
@Override
21+
public Task findOne(Integer id) {
22+
return restTemplate
23+
.getForObject("/todos/{id}", Task.class, id);
24+
}
25+
26+
@Override
27+
public List<Task> findAll() {
28+
return restTemplate
29+
.exchange("/todos?_sort={sort}&_order={order}&_limit={limit}",
30+
HttpMethod.GET,
31+
null,
32+
new ParameterizedTypeReference<List<Task>>() {},
33+
properties.getTodoFindAll().getSort(),
34+
properties.getTodoFindAll().getOrder(),
35+
properties.getTodoFindAll().getLimit())
36+
.getBody();
37+
}
38+
39+
@Override
40+
public List<Task> findByTitle(String title) {
41+
return restTemplate
42+
.exchange("/todos?title_like={title}", HttpMethod.GET, null, new ParameterizedTypeReference<List<Task>>() {}, title)
43+
.getBody();
44+
}
45+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package pl.codeleak.samples.springbootjunit5.todo;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
5+
class Task {
6+
7+
@JsonProperty
8+
private Integer id;
9+
10+
@JsonProperty
11+
private String title;
12+
13+
@JsonProperty
14+
private Integer userId;
15+
16+
@JsonProperty
17+
private boolean completed = false;
18+
19+
Integer getId() {
20+
return id;
21+
}
22+
23+
void setId(Integer id) {
24+
this.id = id;
25+
}
26+
27+
String getTitle() {
28+
return title;
29+
}
30+
31+
void setTitle(String title) {
32+
this.title = title;
33+
}
34+
35+
Integer getUserId() {
36+
return userId;
37+
}
38+
39+
void setUserId(Integer userId) {
40+
this.userId = userId;
41+
}
42+
43+
boolean isCompleted() {
44+
return completed;
45+
}
46+
47+
void setCompleted(boolean completed) {
48+
this.completed = completed;
49+
}
50+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package pl.codeleak.samples.springbootjunit5.todo;
2+
3+
import org.springframework.web.bind.annotation.GetMapping;
4+
import org.springframework.web.bind.annotation.PathVariable;
5+
import org.springframework.web.bind.annotation.RestController;
6+
7+
import java.util.List;
8+
9+
@RestController
10+
class TaskController {
11+
12+
private final TaskRepository taskRepository;
13+
14+
TaskController(TaskRepository taskRepository) {
15+
this.taskRepository = taskRepository;
16+
}
17+
18+
@GetMapping("/tasks/{id}")
19+
Task findOne(@PathVariable Integer id) {
20+
return taskRepository.findOne(id);
21+
}
22+
23+
@GetMapping("/tasks")
24+
List<Task> findAll() {
25+
return taskRepository.findAll();
26+
}
27+
28+
@GetMapping(value = "/tasks", params = "title")
29+
List<Task> findByTitle(String title) {
30+
return taskRepository.findByTitle(title);
31+
}
32+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package pl.codeleak.samples.springbootjunit5.todo;
2+
3+
import java.util.List;
4+
5+
public interface TaskRepository {
6+
7+
Task findOne(Integer id);
8+
9+
List<Task> findAll();
10+
11+
List<Task> findByTitle(String title);
12+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Custom configuration properties for JSON Placeholder API
2+
json-placeholder.root-uri=https://jsonplaceholder.typicode.com
3+
json-placeholder.todo-find-all.sort=id
4+
json-placeholder.todo-find-all.order=desc
5+
json-placeholder.todo-find-all.limit=20
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>404</title>
6+
</head>
7+
<body>
8+
<h1>Error</h1>
9+
<h2>404 - Page Not Found</h2>
10+
</body>
11+
</html>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>Spring Boot and JUnit 5</title>
6+
</head>
7+
<body>
8+
<h1>Demo project for Spring Boot and JUnit 5</h1>
9+
</body>
10+
</html>

0 commit comments

Comments
 (0)