diff --git a/oKBereitschaftsplanungBackend/pom.xml b/oKBereitschaftsplanungBackend/pom.xml
index 08f2bba..ec6e3da 100644
--- a/oKBereitschaftsplanungBackend/pom.xml
+++ b/oKBereitschaftsplanungBackend/pom.xml
@@ -298,7 +298,10 @@
 		<!-- ############################################ -->
 		<!-- ###### NOT ip checked yet ################## -->
 		<!-- ############################################ -->
-
+		<dependency>
+			<groupId>org.glassfish.jersey.ext</groupId>
+			<artifactId>jersey-bean-validation</artifactId>
+		</dependency>
 
 
 		<!-- https://mvnrepository.com/artifact/org.eclipse.birt.runtime/viewservlets -->
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/StandbyPlanningApplication.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/StandbyPlanningApplication.java
index da97f38..2ea6fd8 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/StandbyPlanningApplication.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/StandbyPlanningApplication.java
@@ -61,7 +61,6 @@
 
 		packages("org.eclipse.openk", "io.swagger.jaxrs.listing");
 		// EncodingFilter.enableFor(this, GZipEncoder.class);
-		property("jersey.config.beanValidation.enableOutputValidationErrorEntity.server", "true");
 		property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);
 
 		LOGGER.info("start creating shadow tables and inserting data");
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/model/Organisation.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/model/Organisation.java
index 547c930..15171bd 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/model/Organisation.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/model/Organisation.java
@@ -63,8 +63,7 @@
 	}
 
 	/**
-	 * @param id
-	 *            the id to set
+	 * @param id the id to set
 	 */
 	public void setId(Long id) {
 		this.id = id;
@@ -78,8 +77,7 @@
 	}
 
 	/**
-	 * @param orgaName
-	 *            the orgaName to set
+	 * @param orgaName the orgaName to set
 	 */
 	public void setOrgaName(String orgaName) {
 		this.orgaName = orgaName;
@@ -93,13 +91,12 @@
 	}
 
 	/**
-	 * @param address
-	 *            the address to set
+	 * @param address the address to set
 	 */
 	public void setAddress(Address address) {
 		this.address = address;
 	}
-	
+
 	@Override
 	public int compareTo(AbstractEntity abstractEntity) {
 		return (getId() == abstractEntity.getId()) ? 1 : 0;
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/AddressDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/AddressDto.java
index e94a9f4..35f734b 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/AddressDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/AddressDto.java
@@ -12,11 +12,14 @@
  ********************************************************************************/
 package org.eclipse.openk.sp.dto;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.eclipse.openk.sp.abstracts.AbstractDto;
+
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import org.eclipse.openk.sp.abstracts.AbstractDto;
 
 /**
  * The "Address" Data Transfer Object (DTO)
@@ -31,14 +34,27 @@
 	private static final long serialVersionUID = 1L;
 
 	private Long id;
+	@NotNull(message = "Postleitzahl ist nicht gesetzt")
+	@Size(max = 8, message = "Postleitzahl mit max. 8 Zeichen")
 	private String postcode;
+	@NotNull(message = "Ort ist nicht gesetzt")
+	@Size(max = 256, message = "Ort mit max. 256 Zeichen")
 	private String community;
+	@Size(max = 256, message = "Zusatz mit max. 256 Zeichen")
 	private String communitySuffix;
+	@NotNull(message = "Strasse ist nicht gesetzt")
+	@Size(max = 256, message = "Strasse mit max. 256 Zeichen")
 	private String street;
+	@NotNull(message = "Hausnummer ist nicht gesetzt")
+	@Size(max = 32, message = "Hausnummer mit max. 32 Zeichen")
 	private String housenumber;
+	@Size(max = 256, message = "Zone mit max. 256 Zeichen")
 	private String wgs84zone;
+	@Size(max = 32, message = "Koordinate mit max. 32 Zeichen")
 	private String latitude;
+	@Size(max = 32, message = "Koordinate mit max. 32 Zeichen")
 	private String longitude;
+	@Size(max = 256, message = "URL mit max. 256 Zeichen")
 	private String urlMap;
 
 	/**
@@ -49,8 +65,7 @@
 	}
 
 	/**
-	 * @param id
-	 *            the id to set
+	 * @param id the id to set
 	 */
 	public void setId(Long id) {
 		this.id = id;
@@ -64,8 +79,7 @@
 	}
 
 	/**
-	 * @param postcode
-	 *            the postcode to set
+	 * @param postcode the postcode to set
 	 */
 	public void setPostcode(String postcode) {
 		this.postcode = postcode;
@@ -79,8 +93,7 @@
 	}
 
 	/**
-	 * @param community
-	 *            the community to set
+	 * @param community the community to set
 	 */
 	public void setCommunity(String community) {
 		this.community = community;
@@ -94,8 +107,7 @@
 	}
 
 	/**
-	 * @param communitySuffix
-	 *            the communitySuffix to set
+	 * @param communitySuffix the communitySuffix to set
 	 */
 	public void setCommunitySuffix(String communitySuffix) {
 		this.communitySuffix = communitySuffix;
@@ -109,8 +121,7 @@
 	}
 
 	/**
-	 * @param street
-	 *            the street to set
+	 * @param street the street to set
 	 */
 	public void setStreet(String street) {
 		this.street = street;
@@ -124,8 +135,7 @@
 	}
 
 	/**
-	 * @param housenumber
-	 *            the housenumber to set
+	 * @param housenumber the housenumber to set
 	 */
 	public void setHousenumber(String housenumber) {
 		this.housenumber = housenumber;
@@ -139,8 +149,7 @@
 	}
 
 	/**
-	 * @param wgs84zone
-	 *            the wgs84zone to set
+	 * @param wgs84zone the wgs84zone to set
 	 */
 	public void setWgs84zone(String wgs84zone) {
 		this.wgs84zone = wgs84zone;
@@ -154,8 +163,7 @@
 	}
 
 	/**
-	 * @param latitude
-	 *            the latitude to set
+	 * @param latitude the latitude to set
 	 */
 	public void setLatitude(String latitude) {
 		this.latitude = latitude;
@@ -169,8 +177,7 @@
 	}
 
 	/**
-	 * @param longitude
-	 *            the longitude to set
+	 * @param longitude the longitude to set
 	 */
 	public void setLongitude(String longitude) {
 		this.longitude = longitude;
@@ -184,8 +191,7 @@
 	}
 
 	/**
-	 * @param urlMap
-	 *            the urlMap to set
+	 * @param urlMap the urlMap to set
 	 */
 	public void setUrlMap(String urlMap) {
 		this.urlMap = urlMap;
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/BranchDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/BranchDto.java
index e59c0e9..d8b88ee 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/BranchDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/BranchDto.java
@@ -12,6 +12,7 @@
  ********************************************************************************/
 package org.eclipse.openk.sp.dto;
 
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -29,6 +30,7 @@
 	/** default serial id. */
 	private static final long serialVersionUID = 1L;
 	private Long id;
+	@Size(max = 256, message = "Titel mit max. 256 Zeichen")
 	private String title;
 
 	public Long getId() {
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/CalendarDayDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/CalendarDayDto.java
index 3426b63..0be1550 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/CalendarDayDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/CalendarDayDto.java
@@ -14,6 +14,8 @@
 
 import java.util.Date;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -34,7 +36,10 @@
 	private static final long serialVersionUID = 1L;
 
 	private Long id;
+	@NotNull(message = "Name ist nicht gesetzt")
+	@Size(max = 256, message = "Name mit max. 256 Zeichen")
 	private String name;
+	@NotNull(message = "Datum ist nicht gesetzt")
 	private Date dateIndex;
 
 	/**
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/ContactDataDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/ContactDataDto.java
index db9d1cd..c23b722 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/ContactDataDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/ContactDataDto.java
@@ -12,11 +12,14 @@
  ********************************************************************************/
 package org.eclipse.openk.sp.dto;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.eclipse.openk.sp.abstracts.AbstractDto;
+
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import org.eclipse.openk.sp.abstracts.AbstractDto;
 
 /**
  * The "USER" Data Transfer Object (DTO)
@@ -31,11 +34,18 @@
 	private static final long serialVersionUID = 1L;
 
 	private Long id;
+	@NotNull(message = "Firma oder Privat setzen")
 	private Boolean isPrivate;
+	@NotNull(message = "Mobil ist nicht gesetzt")
+	@Size(max = 256, message = "Mobil mit max. 256 Zeichen")
 	private String phone;
+	@Size(max = 256, message = "Telefon mit max. 256 Zeichen")
 	private String cellphone;
+	@Size(max = 256, message = "Funk mit max. 256 Zeichen")
 	private String radiocomm;
+	@Size(max = 256, message = "E-Mail mit max. 256 Zeichen")
 	private String email;
+	@Size(max = 256, message = "Pager mit max. 256 Zeichen")
 	private String pager;
 
 	/**
@@ -46,8 +56,7 @@
 	}
 
 	/**
-	 * @param id
-	 *            the id to set
+	 * @param id the id to set
 	 */
 	public void setId(Long id) {
 		this.id = id;
@@ -61,8 +70,7 @@
 	}
 
 	/**
-	 * @param isPrivate
-	 *            the isPrivate to set
+	 * @param isPrivate the isPrivate to set
 	 */
 	public void setIsPrivate(Boolean isPrivate) {
 		this.isPrivate = isPrivate;
@@ -76,8 +84,7 @@
 	}
 
 	/**
-	 * @param phone
-	 *            the phone to set
+	 * @param phone the phone to set
 	 */
 	public void setPhone(String phone) {
 		this.phone = phone;
@@ -105,8 +112,7 @@
 	}
 
 	/**
-	 * @param radiocomm
-	 *            the radiocomm to set
+	 * @param radiocomm the radiocomm to set
 	 */
 	public void setRadiocomm(String radiocomm) {
 		this.radiocomm = radiocomm;
@@ -120,8 +126,7 @@
 	}
 
 	/**
-	 * @param email
-	 *            the email to set
+	 * @param email the email to set
 	 */
 	public void setEmail(String email) {
 		this.email = email;
@@ -135,8 +140,7 @@
 	}
 
 	/**
-	 * @param pager
-	 *            the pager to set
+	 * @param pager the pager to set
 	 */
 	public void setPager(String pager) {
 		this.pager = pager;
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/LocationDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/LocationDto.java
index 3bfa123..a92aa90 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/LocationDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/LocationDto.java
@@ -14,6 +14,7 @@
 
 import java.util.List;
 
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -32,46 +33,63 @@
 	 * default serial id.
 	 */
 	private static final long serialVersionUID = 1L;
+	@Size(max = 256, message = "Titel mit max. 256 Zeichen")
 	private String title;
+	@Size(max = 256, message = "Gemeinde mit max. 256 Zeichen")
 	private String district;
+	@Size(max = 8, message = "Kurztext mit max. 8 Zeichen")
 	private String shorttext;
+	@Size(max = 256, message = "Ort mit max. 256 Zeichen")
 	private String community;
 	private List<PostcodeDto> lsPostcode;
+	@Size(max = 32, message = "Zone mit max. 32 Zeichen")
 	private String wgs84zonedistrict;
+	@Size(max = 32, message = "Länge mit max. 32 Zeichen")
 	private String latitudedistrict;
+	@Size(max = 32, message = "Breite mit max. 32 Zeichen")
 	private String longitudedistrict;
+
 	private List<RegionSmallDto> lsRegions;
 	private List<LocationForBranchDto> lsLocationForBranches;
-	
+
 	private Long id;
-	
+
 	public Long getId() {
 		return id;
 	}
+
 	public void setId(Long id) {
 		this.id = id;
 	}
+
 	public String getTitle() {
 		return title;
 	}
+
 	public void setTitle(String title) {
 		this.title = title;
 	}
+
 	public String getDistrict() {
 		return district;
 	}
+
 	public void setDistrict(String district) {
 		this.district = district;
 	}
+
 	public String getShorttext() {
 		return shorttext;
 	}
+
 	public void setShorttext(String shorttext) {
 		this.shorttext = shorttext;
 	}
+
 	public String getCommunity() {
 		return community;
 	}
+
 	public void setCommunity(String community) {
 		this.community = community;
 	}
@@ -79,39 +97,50 @@
 	public String getWgs84zonedistrict() {
 		return wgs84zonedistrict;
 	}
+
 	public void setWgs84zonedistrict(String wgs84zonedistrict) {
 		this.wgs84zonedistrict = wgs84zonedistrict;
 	}
+
 	public String getLatitudedistrict() {
 		return latitudedistrict;
 	}
+
 	public void setLatitudedistrict(String latitudedistrict) {
 		this.latitudedistrict = latitudedistrict;
 	}
+
 	public String getLongitudedistrict() {
 		return longitudedistrict;
 	}
+
 	public void setLongitudedistrict(String longitudedistrict) {
 		this.longitudedistrict = longitudedistrict;
 	}
+
 	public List<RegionSmallDto> getLsRegions() {
 		return lsRegions;
 	}
+
 	public void setLsRegions(List<RegionSmallDto> lsRegions) {
 		this.lsRegions = lsRegions;
 	}
+
 	public List<PostcodeDto> getLsPostcode() {
 		return lsPostcode;
 	}
+
 	public void setLsPostcode(List<PostcodeDto> lsPostcode) {
 		this.lsPostcode = lsPostcode;
 	}
+
 	/**
 	 * @return the lsLocationForBranches
 	 */
 	public List<LocationForBranchDto> getLsLocationForBranches() {
 		return lsLocationForBranches;
 	}
+
 	/**
 	 * @param lsLocationForBranches the lsLocationForBranches to set
 	 */
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/LocationForBranchDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/LocationForBranchDto.java
index 713b2ac..79d9c0e 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/LocationForBranchDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/LocationForBranchDto.java
@@ -14,6 +14,7 @@
 
 import java.util.Date;
 
+import javax.validation.constraints.NotNull;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -33,10 +34,14 @@
 	 */
 	private static final long serialVersionUID = 1L;
 	private Long id;
+	@NotNull(message = "Sparte ist nicht gesetzt")
 	private Long branchId;
 	private String title;
+	@NotNull(message = "Lokation ist nicht gesetzt")
 	private Long locationId;
+
 	private Date validFrom;
+
 	private Date validTo;
 
 	/**
@@ -47,15 +52,12 @@
 	}
 
 	/**
-	 * @param id
-	 *            the id to set
+	 * @param id the id to set
 	 */
 	public void setId(Long id) {
 		this.id = id;
 	}
 
-	
-
 	/**
 	 * @return the branchId
 	 */
@@ -92,8 +94,7 @@
 	}
 
 	/**
-	 * @param title
-	 *            the title to set
+	 * @param title the title to set
 	 */
 	public void setTitle(String title) {
 		this.title = title;
@@ -107,8 +108,7 @@
 	}
 
 	/**
-	 * @param validFrom
-	 *            the validFrom to set
+	 * @param validFrom the validFrom to set
 	 */
 	public void setValidFrom(Date validFrom) {
 		this.validFrom = validFrom;
@@ -122,8 +122,7 @@
 	}
 
 	/**
-	 * @param validTo
-	 *            the validTo to set
+	 * @param validTo the validTo to set
 	 */
 	public void setValidTo(Date validTo) {
 		this.validTo = validTo;
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/LocationSelectionDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/LocationSelectionDto.java
index 1c96777..14c6d5f 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/LocationSelectionDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/LocationSelectionDto.java
@@ -12,6 +12,7 @@
  ********************************************************************************/
 package org.eclipse.openk.sp.dto;
 
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -30,9 +31,13 @@
 	 * default serial id.
 	 */
 	private static final long serialVersionUID = 1L;
+	@Size(max = 256, message = "Titel mit max. 256 Zeichen")
 	private String title;
+	@Size(max = 256, message = "Gemeinde mit max. 256 Zeichen")
 	private String district;
+	@Size(max = 8, message = "Kurztext mit max. 8 Zeichen")
 	private String shorttext;
+	@Size(max = 256, message = "Ort mit max. 256 Zeichen")
 	private String community;
 
 	private Long id;
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/OrganisationDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/OrganisationDto.java
index 84c2ccc..311a100 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/OrganisationDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/OrganisationDto.java
@@ -12,11 +12,15 @@
  ********************************************************************************/
 package org.eclipse.openk.sp.dto;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.eclipse.openk.sp.abstracts.AbstractDto;
+
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import org.eclipse.openk.sp.abstracts.AbstractDto;
 
 /**
  * The "Organisation" Data Transfer Object (DTO)
@@ -30,7 +34,10 @@
 	 */
 	private static final long serialVersionUID = 1L;
 	private Long id;
+	@NotNull(message = "Name ist nicht gesetzt")
+	@Size(max = 256, message = "Name mit max. 256 Zeichen")
 	private String orgaName;
+	@Valid
 	private AddressDto address;
 
 	/**
@@ -41,8 +48,7 @@
 	}
 
 	/**
-	 * @param id
-	 *            the id to set
+	 * @param id the id to set
 	 */
 	public void setId(Long id) {
 		this.id = id;
@@ -56,8 +62,7 @@
 	}
 
 	/**
-	 * @param orgaName
-	 *            the orgaName to set
+	 * @param orgaName the orgaName to set
 	 */
 	public void setOrgaName(String orgaName) {
 		this.orgaName = orgaName;
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/PostcodeDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/PostcodeDto.java
index a2605bf..51d21f5 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/PostcodeDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/PostcodeDto.java
@@ -12,6 +12,8 @@
  ********************************************************************************/
 package org.eclipse.openk.sp.dto;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -32,6 +34,8 @@
 	private static final long serialVersionUID = 1L;
 
 	private Long id;
+	@NotNull(message = "PLZ ist nicht gesetzt")
+	@Size(max = 256, message = "PLZ mit max. 256 Zeichen")
 	private String pcode;
 
 	public PostcodeDto() {
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/RegionSelectionDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/RegionSelectionDto.java
index 921a821..490c644 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/RegionSelectionDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/RegionSelectionDto.java
@@ -12,6 +12,8 @@
  ********************************************************************************/
 package org.eclipse.openk.sp.dto;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -33,9 +35,10 @@
 	 */
 	private static final long serialVersionUID = 1L;
 	private Long id;
+	@NotNull(message = "Name ist nicht gesetzt")
+	@Size(max = 256, message = "Name mit max. 256 Zeichen")
 	private String regionName;
 
-
 	/**
 	 * @return the id
 	 */
@@ -44,8 +47,7 @@
 	}
 
 	/**
-	 * @param id
-	 *            the id to set
+	 * @param id the id to set
 	 */
 	public void setId(Long id) {
 		this.id = id;
@@ -59,5 +61,4 @@
 		this.regionName = regionName;
 	}
 
-	
 }
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/RegionSmallDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/RegionSmallDto.java
index 54fc84f..9d2f96f 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/RegionSmallDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/RegionSmallDto.java
@@ -12,6 +12,8 @@
  ********************************************************************************/
 package org.eclipse.openk.sp.dto;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -31,6 +33,8 @@
 	 */
 	private static final long serialVersionUID = 1L;
 	private Long id;
+	@NotNull(message = "Name ist nicht gesetzt")
+	@Size(max = 256, message = "Name mit max. 256 Zeichen")
 	private String regionName;
 
 	/**
@@ -41,8 +45,7 @@
 	}
 
 	/**
-	 * @param id
-	 *            the id to set
+	 * @param id the id to set
 	 */
 	public void setId(Long id) {
 		this.id = id;
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyDurationDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyDurationDto.java
index 44061c4..2d7c11b 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyDurationDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyDurationDto.java
@@ -14,6 +14,7 @@
 
 import java.util.Date;
 
+import javax.validation.constraints.NotNull;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -33,14 +34,21 @@
 	 */
 	private static final long serialVersionUID = 1L;
 
+	@NotNull(message = "ID ist nicht gesetzt")
 	private Long standbyDurationId;
+	@NotNull(message = "Zeit ist nicht gesetzt")
 	private TimeDto validFrom;
+	@NotNull(message = "Zeit ist nicht gesetzt")
 	private Integer validDayFrom;
+	@NotNull(message = "Tag ist nicht gesetzt")
 	private TimeDto validTo;
+	@NotNull(message = "Tag ist nicht gesetzt")
 	private Integer validDayTo;
 	private Date modificationDate;
+	@NotNull(message = "Gruppe ist nicht gesetzt")
 	private Long standbyGroupId;
-	private Boolean nextUserInNextDuration; 
+	@NotNull(message = "Vorschub ist nicht gesetzt")
+	private Boolean nextUserInNextDuration;
 
 	public StandbyDurationDto() {
 		/** default constructor. */
@@ -54,8 +62,7 @@
 	}
 
 	/**
-	 * @param standbyDurationId
-	 *            the standbyDurationId to set
+	 * @param standbyDurationId the standbyDurationId to set
 	 */
 	public void setStandbyDurationId(Long standbyDurationId) {
 		this.standbyDurationId = standbyDurationId;
@@ -69,8 +76,7 @@
 	}
 
 	/**
-	 * @param validDayFrom
-	 *            the validDayFrom to set
+	 * @param validDayFrom the validDayFrom to set
 	 */
 	public void setValidDayFrom(Integer validDayFrom) {
 		this.validDayFrom = validDayFrom;
@@ -84,8 +90,7 @@
 	}
 
 	/**
-	 * @param validDayTo
-	 *            the validDayTo to set
+	 * @param validDayTo the validDayTo to set
 	 */
 	public void setValidDayTo(Integer validDayTo) {
 		this.validDayTo = validDayTo;
@@ -99,8 +104,7 @@
 	}
 
 	/**
-	 * @param modificationDate
-	 *            the modificationDate to set
+	 * @param modificationDate the modificationDate to set
 	 */
 	public void setModificationDate(Date modificationDate) {
 		this.modificationDate = modificationDate;
@@ -114,8 +118,7 @@
 	}
 
 	/**
-	 * @param standbyGroupId
-	 *            the standbyGroupId to set
+	 * @param standbyGroupId the standbyGroupId to set
 	 */
 	public void setStandbyGroupId(Long standbyGroupId) {
 		this.standbyGroupId = standbyGroupId;
@@ -129,8 +132,7 @@
 	}
 
 	/**
-	 * @param validFrom
-	 *            the validFrom to set
+	 * @param validFrom the validFrom to set
 	 */
 	public void setValidFrom(TimeDto validFrom) {
 		this.validFrom = validFrom;
@@ -144,8 +146,7 @@
 	}
 
 	/**
-	 * @param validTo
-	 *            the validTo to set
+	 * @param validTo the validTo to set
 	 */
 	public void setValidTo(TimeDto validTo) {
 		this.validTo = validTo;
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyGroupDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyGroupDto.java
index 67a053a..ed4ef36 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyGroupDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyGroupDto.java
@@ -16,6 +16,8 @@
 import java.util.Date;
 import java.util.List;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -41,17 +43,22 @@
 	 */
 
 	private Long id;
+	@NotNull(message = "Titel ist nicht gesetzt")
+	@Size(max = 256, message = "Titel mit max. 256 Zeichen")
 	private String title;
+	@Size(max = 2048, message = "Kommentar mit max. 2048 Zeichen")
 	private String note;
 	private Date modificationDate;
+	@NotNull(message = "Zykluns ist nicht gesetzt")
 	private Boolean nextUserInNextCycle;
+	@NotNull(message = "Verlängerung ist nicht gesetzt")
 	private Boolean extendStandbyTime;
 	private List<UserInStandbyGroupDto> lsUserInStandbyGroups;
 	private List<StandbyDurationDto> lsStandbyDurations;
 	private List<BranchDto> lsBranches;
 	private List<UserFunctionDto> lsUserFunction = new ArrayList<>();
 	private List<RegionSelectionDto> lsRegions;
-	private List<CalendarDayDto> lsIgnoredCalendarDays; 
+	private List<CalendarDayDto> lsIgnoredCalendarDays;
 
 	/**
 	 * @return the id
@@ -61,8 +68,7 @@
 	}
 
 	/**
-	 * @param id
-	 *            the id to set
+	 * @param id the id to set
 	 */
 	public void setId(Long id) {
 		this.id = id;
@@ -76,8 +82,7 @@
 	}
 
 	/**
-	 * @param title
-	 *            the title to set
+	 * @param title the title to set
 	 */
 	public void setTitle(String title) {
 		this.title = title;
@@ -91,8 +96,7 @@
 	}
 
 	/**
-	 * @param modificationDate
-	 *            the modificationDate to set
+	 * @param modificationDate the modificationDate to set
 	 */
 	public void setModificationDate(Date modificationDate) {
 		this.modificationDate = modificationDate;
@@ -106,8 +110,7 @@
 	}
 
 	/**
-	 * @param lsUserInStandbyGroups
-	 *            the lsUserInStandbyGroups to set
+	 * @param lsUserInStandbyGroups the lsUserInStandbyGroups to set
 	 */
 	public void setLsUserInStandbyGroups(List<UserInStandbyGroupDto> lsUserInStandbyGroups) {
 		this.lsUserInStandbyGroups = lsUserInStandbyGroups;
@@ -121,8 +124,7 @@
 	}
 
 	/**
-	 * @param lsStandbyDurations
-	 *            the lsStandbyDurations to set
+	 * @param lsStandbyDurations the lsStandbyDurations to set
 	 */
 	public void setLsStandbyDurations(List<StandbyDurationDto> lsStandbyDurations) {
 		this.lsStandbyDurations = lsStandbyDurations;
@@ -136,8 +138,7 @@
 	}
 
 	/**
-	 * @param note
-	 *            the note to set
+	 * @param note the note to set
 	 */
 	public void setNote(String note) {
 		this.note = note;
@@ -151,8 +152,7 @@
 	}
 
 	/**
-	 * @param lsBranches
-	 *            the lsBranches to set
+	 * @param lsBranches the lsBranches to set
 	 */
 	public void setLsBranches(List<BranchDto> lsBranches) {
 		this.lsBranches = lsBranches;
@@ -166,13 +166,12 @@
 	}
 
 	/**
-	 * @param nextUserInNextCycle
-	 *            the nextUserInNextCycle to set
+	 * @param nextUserInNextCycle the nextUserInNextCycle to set
 	 */
 	public void setNextUserInNextCycle(Boolean nextUserInNextCycle) {
 		this.nextUserInNextCycle = nextUserInNextCycle;
 	}
-	
+
 	/**
 	 * @return the extendDuty
 	 */
@@ -195,8 +194,7 @@
 	}
 
 	/**
-	 * @param lsUserFunction
-	 *            the lsUserFunction to set
+	 * @param lsUserFunction the lsUserFunction to set
 	 */
 	public void setLsUserFunction(List<UserFunctionDto> lsUserFunction) {
 		this.lsUserFunction = lsUserFunction;
@@ -210,8 +208,7 @@
 	}
 
 	/**
-	 * @param lsRegions
-	 *            the lsRegions to set
+	 * @param lsRegions the lsRegions to set
 	 */
 	public void setLsRegions(List<RegionSelectionDto> lsRegions) {
 		this.lsRegions = lsRegions;
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyListDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyListDto.java
index 6d7fdf9..f546de4 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyListDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyListDto.java
@@ -16,6 +16,8 @@
 import java.util.Date;
 import java.util.List;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -38,6 +40,8 @@
 	private static final long serialVersionUID = 1L;
 
 	private Long id;
+	@NotNull(message = "Name fehlt")
+	@Size(max = 256, message = "Name mit max. 256 Zeichen\")")
 	private String title;
 	private Date modificationDate;
 	private List<StandbyListHasStandbyGroupDto> lsStandbyListHasStandbyGroup = new ArrayList<>();
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyListHasStandbyGroupDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyListHasStandbyGroupDto.java
index cb01797..ff4dc1d 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyListHasStandbyGroupDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/StandbyListHasStandbyGroupDto.java
@@ -12,6 +12,7 @@
  ********************************************************************************/
 package org.eclipse.openk.sp.dto;
 
+import javax.validation.constraints.NotNull;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -34,8 +35,10 @@
 	private static final long serialVersionUID = 1L;
 
 	private Long id;
+	@NotNull(message = "Gruppe muss gesetzt sein")
 	private Long standbyGroupId;
 	private String standbyGroupName;
+	@NotNull(message = "Liste muss gesetzt sein")
 	private Long standbyListId;
 	private Integer position;
 
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserDto.java
index 63450d4..5fbb065 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserDto.java
@@ -16,6 +16,9 @@
 import java.util.Date;
 import java.util.List;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -36,19 +39,32 @@
 	private static final long serialVersionUID = 1L;
 
 	private Long id;
+	@Size(max = 256, message = "Vorname mit max. 256 Zeichen")
 	private String firstname;
+	@Size(max = 256, message = "Nachname mit max. 256 Zeichen")
 	private String lastname;
+	@Size(max = 256, message = "HR-Nummer mit max. 256 Zeichen")
 	private String hrNumber;
+	@Size(max = 256, message = "Pers-Nr. mit max. 256 Zeichen")
 	private String userKey;
+	@NotNull(message = "Privat oder Firma kennzeichnen")
 	private Boolean isCompany;
+	@Size(max = 2048, message = "Vorname mit max. 2048 Zeichen")
 	private String notes;
+
 	private Date validFrom;
+
 	private Date validTo;
 	private Date modificationDate;
+	@Valid
 	private OrganisationDto organisation;
+	@Valid
 	private AddressDto privateAddress;
+	@Valid
 	private ContactDataDto businessContactData;
+	@Valid
 	private ContactDataDto privateContactData;
+
 	private List<UserInRegionDto> lsUserInRegions = new ArrayList<>();
 	private List<UserHasUserFunctionDto> lsUserFunctions = new ArrayList<>();
 
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserFunctionDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserFunctionDto.java
index b482087..4f1834d 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserFunctionDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserFunctionDto.java
@@ -12,6 +12,8 @@
  ********************************************************************************/
 package org.eclipse.openk.sp.dto;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -32,9 +34,10 @@
 	private static final long serialVersionUID = 1L;
 	private Long id;
 	private Long functionId;
+	@NotNull(message = "Funktionsname fehlt")
+	@Size(max = 256, message = "Name mit max. 256 Zeichen")
 	private String functionName;
 
-
 	/**
 	 * @return the id
 	 */
@@ -43,8 +46,7 @@
 	}
 
 	/**
-	 * @param id
-	 *            the id to set
+	 * @param id the id to set
 	 */
 	public void setId(Long id) {
 		this.id = id;
@@ -66,7 +68,4 @@
 		this.functionId = functionId;
 	}
 
-
-
-
 }
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserFunctionSelectionDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserFunctionSelectionDto.java
index a0f38d3..d262b4e 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserFunctionSelectionDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserFunctionSelectionDto.java
@@ -12,6 +12,7 @@
  ********************************************************************************/
 package org.eclipse.openk.sp.dto;
 
+import javax.validation.constraints.NotNull;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -31,7 +32,9 @@
 	 */
 	private static final long serialVersionUID = 1L;
 	private Long id;
+	@NotNull(message = "Id ist nicht gesetzt")
 	private Long functionId;
+	@NotNull(message = "Name ist nicht gesetzt")
 	private String functionName;
 
 	/**
@@ -42,8 +45,7 @@
 	}
 
 	/**
-	 * @param id
-	 *            the id to set
+	 * @param id the id to set
 	 */
 	public void setId(Long id) {
 		this.id = id;
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserInStandbyGroupDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserInStandbyGroupDto.java
index 9f7c441..f2b0ca1 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserInStandbyGroupDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/UserInStandbyGroupDto.java
@@ -14,6 +14,7 @@
 
 import java.util.Date;
 
+import javax.validation.constraints.NotNull;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.eclipse.openk.sp.abstracts.AbstractDto;
@@ -37,12 +38,16 @@
 
 	private Long id;
 
+	@NotNull(message = "Gruppe ist nicht gesetzt")
 	private Long standbyGroupId;
+	@NotNull(message = "Mitarbeiter ist nicht gesetzt")
 	private Long userId;
 	private String firstname;
 	private String lastname;
 
+	@NotNull(message = "Gültig von ist nicht gesetzt")
 	private Date validFrom;
+	@NotNull(message = "Gültig bis ist nicht gesetzt")
 	private Date validTo;
 
 	private String userRegionStr;
@@ -62,8 +67,7 @@
 	}
 
 	/**
-	 * @param id
-	 *            the id to set
+	 * @param id the id to set
 	 */
 	public void setId(Long id) {
 		this.id = id;
@@ -77,8 +81,7 @@
 	}
 
 	/**
-	 * @param validFrom
-	 *            the validFrom to set
+	 * @param validFrom the validFrom to set
 	 */
 	public void setValidFrom(Date validFrom) {
 		this.validFrom = validFrom;
@@ -92,8 +95,7 @@
 	}
 
 	/**
-	 * @param validTo
-	 *            the validTo to set
+	 * @param validTo the validTo to set
 	 */
 	public void setValidTo(Date validTo) {
 		this.validTo = validTo;
@@ -107,8 +109,7 @@
 	}
 
 	/**
-	 * @param standbyGroupId
-	 *            the standbyGroupId to set
+	 * @param standbyGroupId the standbyGroupId to set
 	 */
 	public void setStandbyGroupId(Long standbyGroupId) {
 		this.standbyGroupId = standbyGroupId;
@@ -122,8 +123,7 @@
 	}
 
 	/**
-	 * @param userId
-	 *            the userId to set
+	 * @param userId the userId to set
 	 */
 	public void setUserId(Long userId) {
 		this.userId = userId;
@@ -137,8 +137,7 @@
 	}
 
 	/**
-	 * @param firstname
-	 *            the firstname to set
+	 * @param firstname the firstname to set
 	 */
 	public void setFirstname(String firstname) {
 		this.firstname = firstname;
@@ -152,8 +151,7 @@
 	}
 
 	/**
-	 * @param lastname
-	 *            the lastname to set
+	 * @param lastname the lastname to set
 	 */
 	public void setLastname(String lastname) {
 		this.lastname = lastname;
@@ -167,8 +165,7 @@
 	}
 
 	/**
-	 * @param userRegionStr
-	 *            the userRegionStr to set
+	 * @param userRegionStr the userRegionStr to set
 	 */
 	public void setUserRegionStr(String userRegionStr) {
 		this.userRegionStr = userRegionStr;
@@ -182,8 +179,7 @@
 	}
 
 	/**
-	 * @param userHasUserFunctionStr
-	 *            the userHasUserFunctionStr to set
+	 * @param userHasUserFunctionStr the userHasUserFunctionStr to set
 	 */
 	public void setUserHasUserFunctionStr(String userHasUserFunctionStr) {
 		this.userHasUserFunctionStr = userHasUserFunctionStr;
@@ -197,8 +193,7 @@
 	}
 
 	/**
-	 * @param organisationName
-	 *            the organisationName to set
+	 * @param organisationName the organisationName to set
 	 */
 	public void setOrganisationName(String organisationName) {
 		this.organisationName = organisationName;
@@ -212,8 +207,7 @@
 	}
 
 	/**
-	 * @param position
-	 *            the position to set
+	 * @param position the position to set
 	 */
 	public void setPosition(Integer pos) {
 		this.position = pos;
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/CalendarRestService.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/CalendarRestService.java
index aace616..755882d 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/CalendarRestService.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/CalendarRestService.java
@@ -14,6 +14,7 @@
 
 import java.util.List;
 
+import javax.validation.Valid;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -84,7 +85,7 @@
 	@Path("/save")
 	public Response saveCalendarDay(
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			CalendarDayDto calendarDayDto) {
+			@Valid CalendarDayDto calendarDayDto) {
 
 		ModifyingInvokable<CalendarDayDto> invokable = modusr -> calendarController.saveCalendarDay(calendarDayDto);
 
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/LocationRestService.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/LocationRestService.java
index 2c5989d..1eea19c 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/LocationRestService.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/LocationRestService.java
@@ -14,6 +14,7 @@
 
 import java.util.List;
 
+import javax.validation.Valid;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -105,7 +106,7 @@
 	@Path("/{id}/branch/save/list")
 	public Response saveBranchesForLocation(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<LocationForBranchDto> lsLocationForBranchDto) {
+			@Valid List<LocationForBranchDto> lsLocationForBranchDto) {
 
 		ModifyingInvokable<List<LocationForBranchDto>> invokable = modusr -> locationController
 				.saveBranchesForLocation(id, lsLocationForBranchDto);
@@ -135,7 +136,7 @@
 	@Path("/{id}/region/save/list")
 	public Response saveRegionsForLocation(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<RegionSmallDto> lsRegionDto) {
+			@Valid List<RegionSmallDto> lsRegionDto) {
 
 		ModifyingInvokable<List<RegionSmallDto>> invokable = modusr -> locationController.saveRegionsForLocation(id,
 				lsRegionDto);
@@ -165,7 +166,7 @@
 	@Path("/{id}/postcode/save/list")
 	public Response savePostcodesForLocation(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<PostcodeDto> lsPostcodeDto) {
+			@Valid List<PostcodeDto> lsPostcodeDto) {
 
 		ModifyingInvokable<List<PostcodeDto>> invokable = modusr -> locationController.savePostcodeForLocation(id,
 				lsPostcodeDto);
@@ -195,7 +196,7 @@
 	@Path("/save")
 	public Response saveLocation(
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			LocationDto locationDto) {
+			@Valid LocationDto locationDto) {
 
 		ModifyingInvokable<LocationDto> invokable = modusr -> locationController.saveLocation(locationDto);
 
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/OrganisationRestService.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/OrganisationRestService.java
index d89a5d5..20ba70a 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/OrganisationRestService.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/OrganisationRestService.java
@@ -14,6 +14,7 @@
 
 import java.util.List;
 
+import javax.validation.Valid;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -90,7 +91,7 @@
 	@Path("/save")
 	public Response saveOrganisation(
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			OrganisationDto organisationDto) {
+			@Valid OrganisationDto organisationDto) {
 
 		ModifyingInvokable<OrganisationDto> invokable = modusr -> organisationController
 				.saveOrganisation(organisationDto);
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/PostcodeRestService.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/PostcodeRestService.java
index 581dd17..97ce99c 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/PostcodeRestService.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/PostcodeRestService.java
@@ -14,6 +14,7 @@
 
 import java.util.List;
 
+import javax.validation.Valid;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -84,7 +85,7 @@
 	@Path("/save")
 	public Response savePostcode(
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			PostcodeDto postcodeDto) {
+			@Valid PostcodeDto postcodeDto) {
 
 		ModifyingInvokable<PostcodeDto> invokable = modusr -> postcodeController.savePostcode(postcodeDto);
 
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/RegionRestService.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/RegionRestService.java
index b6f5e5b..064951e 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/RegionRestService.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/RegionRestService.java
@@ -14,6 +14,7 @@
 
 import java.util.List;
 
+import javax.validation.Valid;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -90,7 +91,7 @@
 	@Path("/{id}/location/save/list")
 	public Response saveLocationsForRegion(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<LocationSelectionDto> lsLocationDto) {
+			@Valid List<LocationSelectionDto> lsLocationDto) {
 
 		ModifyingInvokable<List<LocationSelectionDto>> invokable = modusr -> regionController.saveLocationsForRegion(id,
 				lsLocationDto);
@@ -120,7 +121,7 @@
 	@Path("/save")
 	public Response saveRegionDto(
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			RegionSelectionDto regionSelectionDto) {
+			@Valid RegionSelectionDto regionSelectionDto) {
 
 		RegionDto regionDto = new RegionDto(regionSelectionDto);
 
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/StandbyGroupRestService.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/StandbyGroupRestService.java
index 3fdd5b7..7f95813 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/StandbyGroupRestService.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/StandbyGroupRestService.java
@@ -14,6 +14,7 @@
 
 import java.util.List;
 
+import javax.validation.Valid;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -99,7 +100,7 @@
 	@Path("/{id}/branch/save/list")
 	public Response saveBranchesForStandbyGroup(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<BranchDto> listBranchDto) {
+			@Valid List<BranchDto> listBranchDto) {
 
 		ModifyingInvokable<List<BranchDto>> invokable = modusr -> standbyGroupController.saveBranchesForStandbyGroup(id,
 				listBranchDto);
@@ -129,7 +130,7 @@
 	@Path("/save")
 	public Response saveStandbyGroup(
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			StandbyGroupDto standbyGroupDto) {
+			@Valid StandbyGroupDto standbyGroupDto) {
 
 		ModifyingInvokable<AbstractDto> invokable = modusr -> standbyGroupController.saveStandbyGroup(standbyGroupDto);
 
@@ -143,7 +144,7 @@
 	@Path("/{id}/region/save/list")
 	public Response saveRegionForGroup(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<RegionSelectionDto> lsRegionSelectionDtos) {
+			@Valid List<RegionSelectionDto> lsRegionSelectionDtos) {
 		ModifyingInvokable<List<RegionSelectionDto>> invokable = modusr -> standbyGroupController
 				.saveRegionsForStandbyGroup(id, lsRegionSelectionDtos);
 
@@ -171,7 +172,7 @@
 	@Path("/{id}/user/save/list")
 	public Response saveStandbyGroupUserList(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<UserInStandbyGroupDto> listStandbyGroupUserDto) {
+			@Valid List<UserInStandbyGroupDto> listStandbyGroupUserDto) {
 
 		ModifyingInvokable<UserInStandbyGroupResponseDto> invokable = modusr -> standbyGroupController.saveUserList(id,
 				listStandbyGroupUserDto);
@@ -237,7 +238,7 @@
 	@Path("/{id}/duration/save/list")
 	public Response saveStandbyGroupDurationList(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<StandbyDurationDto> listStandbyDurationDto) {
+			@Valid List<StandbyDurationDto> listStandbyDurationDto) {
 
 		ModifyingInvokable<StandbyDurationResponseDto> invokable = modusr -> standbyGroupController.saveDurationList(id,
 				listStandbyDurationDto);
@@ -271,7 +272,7 @@
 	@Path("/{id}/userfunction/save/list")
 	public Response saveFunctionsForGroup(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<UserFunctionSelectionDto> lsUserFunctionSelectionDtos) {
+			@Valid List<UserFunctionSelectionDto> lsUserFunctionSelectionDtos) {
 
 		ModifyingInvokable<List<UserFunctionSelectionDto>> invokable = modusr -> standbyGroupController
 				.saveUserFunctionList(id, lsUserFunctionSelectionDtos);
@@ -301,7 +302,7 @@
 	@Path("/{id}/calendar/ignore/save/list")
 	public Response saveIgnoreCalendarDayList(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<CalendarDayDto> listCalendarDaysDto) {
+			@Valid List<CalendarDayDto> listCalendarDaysDto) {
 
 		ModifyingInvokable<List<CalendarDayDto>> invokable = modusr -> standbyGroupController
 				.saveIgnoredCalendarDayList(id, listCalendarDaysDto);
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/StandbyListRestService.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/StandbyListRestService.java
index 297fa56..7eb3d6d 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/StandbyListRestService.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/StandbyListRestService.java
@@ -14,6 +14,7 @@
 
 import java.util.List;
 
+import javax.validation.Valid;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -105,7 +106,7 @@
 	@Path("/save")
 	public Response saveStandbyList(
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			StandbyListDto standbyListDto) {
+			@Valid StandbyListDto standbyListDto) {
 
 		ModifyingInvokable<AbstractDto> invokable = modusr -> standbyListController.saveStandbyList(standbyListDto);
 
@@ -119,7 +120,7 @@
 	@Path("/{id}/standbygroup/save/list")
 	public Response addStandbyGroup(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<StandbyListHasStandbyGroupDto> lsStandbyListHasStandbyGroupDto) {
+			@Valid List<StandbyListHasStandbyGroupDto> lsStandbyListHasStandbyGroupDto) {
 
 		ModifyingInvokable<List<StandbyListHasStandbyGroupDto>> invokable = modusr -> standbyListController
 				.saveStandbyGroupsForStandbyList(id, lsStandbyListHasStandbyGroupDto);
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/UserFunctionRestService.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/UserFunctionRestService.java
index 14d8a32..a80c6fe 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/UserFunctionRestService.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/UserFunctionRestService.java
@@ -14,6 +14,7 @@
 
 import java.util.List;
 
+import javax.validation.Valid;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -90,7 +91,7 @@
 	@Path("/save")
 	public Response saveUserFunction(
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			UserFunctionDto userFunctionDto) {
+			@Valid UserFunctionDto userFunctionDto) {
 
 		ModifyingInvokable<UserFunctionDto> invokable = modusr -> userFunctionController
 				.saveUserFunction(userFunctionDto);
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/UserRestService.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/UserRestService.java
index 302b6d7..5a5ffbc 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/UserRestService.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/rest/UserRestService.java
@@ -14,6 +14,7 @@
 
 import java.util.List;
 
+import javax.validation.Valid;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -119,7 +120,7 @@
 	@Path("/{id}/region/save/list")
 	public Response saveRegionsForUser(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<UserInRegionDto> lsUserInRegionsDto) {
+			@Valid List<UserInRegionDto> lsUserInRegionsDto) {
 
 		ModifyingInvokable<List<UserInRegionDto>> invokable = modusr -> userController.saveRegionsForUser(id,
 				lsUserInRegionsDto);
@@ -149,7 +150,7 @@
 	@Path("/{id}/userfunction/save/list")
 	public Response saveFunctionsForUser(@PathParam("id") Long id,
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			List<UserHasUserFunctionDto> lsFunctionDto) {
+			@Valid List<UserHasUserFunctionDto> lsFunctionDto) {
 
 		ModifyingInvokable<List<UserHasUserFunctionDto>> invokable = modusr -> userController.saveFunctionsForUser(id,
 				lsFunctionDto);
@@ -179,7 +180,7 @@
 	@Path("/save")
 	public Response saveUser(
 			@ApiParam(name = "Authorization", value = "JWT Token", required = true) @HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String jwt,
-			UserDto userDto) {
+			@Valid UserDto userDto) {
 
 		ModifyingInvokable<UserDto> invokable = modusr -> userController.saveUser(userDto);
 
diff --git a/oKBereitschaftsplanungBackend/src/main/resources/documents/oK_Bereitschaftsplanung.pdf b/oKBereitschaftsplanungBackend/src/main/resources/documents/oK_Bereitschaftsplanung.pdf
index 17acfa7..c7ed5a0 100644
--- a/oKBereitschaftsplanungBackend/src/main/resources/documents/oK_Bereitschaftsplanung.pdf
+++ b/oKBereitschaftsplanungBackend/src/main/resources/documents/oK_Bereitschaftsplanung.pdf
Binary files differ
