%Teilweise Erzeugt mit dem LaTeX-Generator: http://latex.sehnot.de

%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}

%neue Rechtschreibung
\usepackage[ngerman]{babel}

%Umlaute ermöglichen
\usepackage[utf8]{inputenc}

%Gesamtseitenzahl
\usepackage{lastpage}

% Kopf- und Fußzeile
\usepackage[automark]{scrpage2}

%Hyperlinks
\usepackage{hyperref}

%Quellcode-Listings
\usepackage{listings}

%Kopfzeile
\ihead{Java}
\chead{}
\ohead{http://kohnlehome.de/java/spring-boot-rest-api.pdf}
\setheadsepline{0.5pt}

%Fußzeile
\setfootsepline{0.5pt}
\ifoot{Franz Kohnle}
\cfoot{Seite \thepage\ von  \pageref{LastPage}}
\ofoot{\today}

\pagestyle{scrheadings}

\begin{document}

% Überschrift 
\begin{center}
\LARGE % Schriftgröße
\bfseries % Fettdruck
\sffamily % Serifenlose Schrift
REST-API mit Spring Boot
\end{center}

\section{Quelle}
Accessing JPA Data with REST: \href{https://spring.io/guides/gs/accessing-data-rest/}{https://spring.io/guides/gs/accessing-data-rest/}

\section{Spring-Boot-Projekt mit Spring Initializr erstellen}
\href{https://start.spring.io/}{https://start.spring.io/}

\subsection*{Dependencies}
\begin{itemize}
\item Rest Repositories
\item Spring Data JPA
\item H2 Database
\end{itemize}

\section{Konfigurationsdatei /src/main/resources/application.properties}
\subsection*{Port ändern}
\begin{verbatim}
server.port=8081
\end{verbatim}

\subsection*{H2-Console aktivieren}
\begin{verbatim}
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
\end{verbatim}

\section{Entity-Klasse erstellen}
\begin{verbatim}
package de.kohnlehome.springbootrestapi;

import ...

@Entity
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String vorname;
    private String nachname;
    private LocalDate geburtsdatum;

    // ... getter + setter fuer vorname, nachname, geburtsdatum
}
\end{verbatim}

\section{Repository-Interface erstellen}
\begin{verbatim}
package de.kohnlehome.springbootrestapi;

import org.springframework.data.repository.PagingAndSortingRepository;

public interface PersonRepository extends PagingAndSortingRepository <Person, Long> { }
\end{verbatim}

\section{CRUD mit REST-Client}
\subsection*{CREATE}
\begin{verbatim}
POST http://localhost:8081/persons/

Content-Type: application/json

{
  "vorname": "Anna",
  "nachname": "Arm",
  "geburtsdatum": "2001-01-01"
}
\end{verbatim}

\subsection*{READ}
\begin{verbatim}
GET http://localhost:8081/persons/1
\end{verbatim}

\subsection*{UPDATE}
\subsubsection*{alle Elemente überschreiben}
\begin{verbatim}
PUT http://localhost:8081/persons/1

Content-Type: application/json

{
  "vorname": "Annabell",
  "nachname": "Armdran",
  "geburtsdatum": "2001-01-01"
}
\end{verbatim}

\subsubsection*{einzelne Elemente überschreiben}
\begin{verbatim}
PATCH http://localhost:8081/persons/1

Content-Type: application/json

{
  "vorname": "Anna"  
}
\end{verbatim}

\subsection*{DELETE}
\begin{verbatim}
DELETE http://localhost:8081/persons/1
\end{verbatim}

\section{H2-Console}
\href{http://localhost:8081/h2-console/}{http://localhost:8081/h2-console/}

\begin{verbatim}
JDBC URL: jdbc:h2:mem:testdb
User Name: sa
Password: <leer lassen>
\end{verbatim}


\end{document}
