Hi!
Ich will innerhalb meiner SpringBoot-Application eine einfache externe API konsumieren, die öffentliche Feiertage anzeigt.
Zb. die von Deutschland 2023:
Ich habe dazu in einem dto-sub-package innerhalb meinem model-package eine entity-Klasse erstellt (jedoch nur mir den Attributen, die ich mir anzeigen will) :
Danach habe ich innerhalb meiner index-view ein Suchfeld erstellt, das je nach Eingabe nach Feiertagen gem. Jahr und Ländercode suchen soll.
Die Strings in den views bitte ignorieren, die passe ich später noch an.
Eine gültige Sucheingabe wäre dann z.B.: 2023/DE
Relevante Stelle in index-View:
Danach habe ich einen RestController erstellt:
Schließlich sollen in dieser view die einzelnen Feiertage angezeigt werden (Spaltenbenennungen noch nichts angepasst - bitte ignorieren) :
View -> holiday-list:
Beim Laufen des Codes komme ich nicht weit:
Ich vermute, dass etnweder mein Versuch den searchTerm als Teil des Pfades in der index-View oder im RestController nicht korrekt ist.
Über Hilfe, wie ich doch noch diese einfache RestAPI konsumieren könnte, wäre ich dankbar.
Lg
Zrebna
Ich will innerhalb meiner SpringBoot-Application eine einfache externe API konsumieren, die öffentliche Feiertage anzeigt.
Zb. die von Deutschland 2023:
Ich habe dazu in einem dto-sub-package innerhalb meinem model-package eine entity-Klasse erstellt (jedoch nur mir den Attributen, die ich mir anzeigen will) :
Java:
public class Holiday {
Date date;
String localName;
String name;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getLocalName() {
return localName;
}
public void setLocalName(String localName) {
this.localName = localName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Danach habe ich innerhalb meiner index-view ein Suchfeld erstellt, das je nach Eingabe nach Feiertagen gem. Jahr und Ländercode suchen soll.
Die Strings in den views bitte ignorieren, die passe ich später noch an.
Eine gültige Sucheingabe wäre dann z.B.: 2023/DE
Relevante Stelle in index-View:
HTML:
<div class="mt-4">
<h4 th:text="#{search_reviews}"></h4>
<form action="#" th:action="@{/search-reviews/{searchTerm}(searchTerm=${searchTerm})}" method="GET">
<div class="row my-2">
<input type="text" name="searchTerm" required
th:value="${searchTerm}" class="form-control"
th:placeholder="#{user_name}" />
</div>
<div class="row my-2">
<button type="submit" class="btn btn-primary" th:text="#{search}"></button>
</div>
</form>
</div>
Danach habe ich einen RestController erstellt:
Java:
@Controller
@RequestMapping("/api/holidays")
public class PublicHolidaysRestController {
private final RestTemplate restTemplate;
@Autowired
public PublicHolidaysRestController(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.build();
}
@GetMapping("/")
public String consumePublicHolidaysByYearAndCountry(@PathVariable("searchTerm") String searchTerm, Model model) {
ResponseEntity<Holiday[]> responseEntity = restTemplate
.getForEntity("https://date.nager.at/api/v2/publicholidays/" + searchTerm, Holiday[].class);
// extracting body into array of {@link Holiday}s
Holiday[] holidays = responseEntity.getBody();
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JSR310Module());
model.addAttribute("holidays", holidays);
return "/holiday/holiday-list";
}
}
Schließlich sollen in dieser view die einzelnen Feiertage angezeigt werden (Spaltenbenennungen noch nichts angepasst - bitte ignorieren) :
View -> holiday-list:
HTML:
DOCTYPE html>
<html layout:decorate="~{layouts/default-layout}">
<head>
<title></title>
</head>
<body>
<div layout:fragment="content">
<h4>Holidays</h4>
<table class="border text-center table">
<thead class="border table-dark">
<tr>
<th class="border" scope="col" th:text="#{date}"></th>
<th class="border" scope="col" th:text="#{rating}"></th>
<th class="border" scope="col" th:text="#{review}"></th>
<th class="border" scope="col"></th>
</tr>
</thead>
<tbody>
<tr th:each="holiday : ${holidays}">
<td class="border" th:text="${holiday.name}"></td>
<td class="border" th:text="${holiday.localName}"></td>
<td class="border" th:text="${holiday.name}"></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Beim Laufen des Codes komme ich nicht weit:
Code:
Resolved [org.springframework.web.bind.MissingPathVariableException: Required URI template variable 'searchTerm' for method parameter type String is not present]
Ich vermute, dass etnweder mein Versuch den searchTerm als Teil des Pfades in der index-View oder im RestController nicht korrekt ist.
Über Hilfe, wie ich doch noch diese einfache RestAPI konsumieren könnte, wäre ich dankbar.
Lg
Zrebna