diff --git a/enterprise-adapter/pom.xml b/enterprise-adapter/pom.xml
index 96d272d79816e7c89ccb25e7294ac1ba79fc2752..362c7f196cf5511c026a170c6fdfd4c9357c3bb0 100644
--- a/enterprise-adapter/pom.xml
+++ b/enterprise-adapter/pom.xml
@@ -30,6 +30,20 @@
 			<groupId>de.itvsh.kop.eingangsadapter</groupId>
 			<artifactId>common</artifactId>
 		</dependency>
+
+		<!--dev tools-->
+		<dependency>
+			<groupId>org.mapstruct</groupId>
+			<artifactId>mapstruct</artifactId>
+		</dependency>
+		
+		<!--test -->
+		<dependency>
+			<groupId>de.itvsh.kop.eingangsadapter</groupId>
+			<artifactId>common</artifactId>
+			<type>test-jar</type>
+			<scope>test</scope>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryController.java b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryController.java
new file mode 100644
index 0000000000000000000000000000000000000000..96ff9a79fd58081775581a678c3ee2c6869fcf22
--- /dev/null
+++ b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryController.java
@@ -0,0 +1,29 @@
+package de.ozgcloud.eingang.enterprise.entry;
+
+import java.io.IOException;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.Resource;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@Controller
+@ResponseBody
+@RequestMapping("antrag")
+public class EntryController {
+
+	@Autowired
+	private EntryDataMapper mapper;
+
+	@ResponseStatus(HttpStatus.ACCEPTED)
+	@PostMapping(consumes = "multipart/form-data", produces = MediaType.APPLICATION_JSON_VALUE)
+	public void receiveAntrag(@RequestPart Resource formData) throws IOException {
+		mapper.mapEntryData(formData.getInputStream());
+	}
+}
diff --git a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryData.java b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryData.java
index fd0a4ed23de2012b532a795ba688ada1262ecee3..ac18bfda3d1d8dc20d0a69e22d78aeff1a06fc22 100644
--- a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryData.java
+++ b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryData.java
@@ -35,11 +35,4 @@ public class EntryData {
 			private String address;
 		}
 	}
-
-	@Builder
-	@Getter
-	@Jacksonized
-	public static class EntryFormData {
-
-	}
 }
diff --git a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryDataMapper.java b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryDataMapper.java
index bb40354bfc7e8fe34cc7464d06c60789d1dc7d92..1c2c5340499d72c4101fc52bbbd40ddec37c3c2d 100644
--- a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryDataMapper.java
+++ b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/EntryDataMapper.java
@@ -15,10 +15,11 @@ class EntryDataMapper {
 
 	@Autowired
 	private ObjectMapper objectMapper;
+	@Autowired
+	private FormDataMapper formDataMapper;
 
 	public FormData mapEntryData(InputStream request) {
-		// TODO Auto-generated method stub
-		return null;
+		return formDataMapper.mapEntryData(readRequest(request));
 	}
 
 	EntryData readRequest(InputStream request) {
@@ -29,4 +30,5 @@ class EntryDataMapper {
 		}
 
 	}
+
 }
diff --git a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapper.java b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..6bf2030f3366f1c47d919fdf36c3c7494e40ab4c
--- /dev/null
+++ b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapper.java
@@ -0,0 +1,38 @@
+package de.ozgcloud.eingang.enterprise.entry;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+
+import de.ozgcloud.eingang.common.formdata.FormData;
+import de.ozgcloud.eingang.common.formdata.FormHeader;
+import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
+
+@Mapper
+public interface FormDataMapper {
+
+	@Mapping(target = "antragsteller", ignore = true)
+	@Mapping(target = "attachment", ignore = true)
+	@Mapping(target = "attachments", ignore = true)
+	@Mapping(target = "numberOfAttachments", ignore = true)
+	@Mapping(target = "representation", ignore = true)
+	@Mapping(target = "representations", ignore = true)
+	@Mapping(target = "numberOfRepresentations", ignore = true)
+
+	@Mapping(target = "id", ignore = true)
+	@Mapping(target = "header", source = "control")
+
+	@Mapping(target = "zustaendigeStelle", source = "control.zustaendigeStelle")
+	FormData mapEntryData(EntryData entryData);
+
+	@Mapping(target = "createdAt", ignore = true)
+	@Mapping(target = "formEngineName", constant = "EnterpriseSoftware")
+	@Mapping(target = "requestId", source = "transactionId")
+	@Mapping(target = "sender", ignore = true) // TODO fill from authentication
+	@Mapping(target = "serviceKonto", ignore = true)
+	FormHeader mapHeader(EntryData.ControlData controlData);
+
+	default ZustaendigeStelle fromId(String organisationsEinheitenId) {
+		return ZustaendigeStelle.builder().organisationseinheitenId(organisationsEinheitenId).build();
+	}
+
+}
diff --git a/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryControllerTest.java b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryControllerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb94507c82029ff753428b9099c11a1f6329d8dc
--- /dev/null
+++ b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryControllerTest.java
@@ -0,0 +1,72 @@
+package de.ozgcloud.eingang.enterprise.entry;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+import java.io.InputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.ResultActions;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import de.itvsh.kop.common.test.TestUtils;
+import lombok.SneakyThrows;
+
+class EntryControllerTest {
+
+	@InjectMocks
+	private EntryController controller;
+
+	@Mock
+	private EntryDataMapper mapper;
+
+	private MockMvc mockMvc;
+
+	@BeforeEach
+	void init() {
+		mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
+	}
+
+	@Nested
+	class ReceiveAntrag {
+
+		@Captor
+		private ArgumentCaptor<InputStream> streamCaptor;
+
+		@Test
+		@SneakyThrows
+		void shouldReturnAccepted() {
+			doPostRequest().andExpect(status().isAccepted());
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldCallMapper() {
+			var request = TestUtils.loadTextFile("request/simple.json");
+
+			doPostRequest();
+
+			verify(mapper).mapEntryData(streamCaptor.capture());
+			var inputBytes = IOUtils.readFully(streamCaptor.getValue(), request.getBytes().length);
+			assertThat(inputBytes).hasSameSizeAs(request.getBytes()).isEqualTo(request.getBytes());
+		}
+
+		@SneakyThrows
+		private ResultActions doPostRequest() {
+			return mockMvc.perform(multipart("/antrag")
+					.file(new MockMultipartFile("formData", TestUtils.loadTextFile("request/simple.json").getBytes())));
+		}
+	}
+
+}
diff --git a/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryDataMapperTest.java b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryDataMapperTest.java
index 9ae7f427464b5c23530855e1fbee2e88ef82565d..238ce95c1997b70c0a76bdc323c0078eaff7fb67 100644
--- a/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryDataMapperTest.java
+++ b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EntryDataMapperTest.java
@@ -1,40 +1,79 @@
 package de.ozgcloud.eingang.enterprise.entry;
 
 import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import java.io.InputStream;
 
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.mockito.Spy;
 
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import de.itvsh.kop.common.test.TestUtils;
+import de.ozgcloud.eingang.common.formdata.FormData;
+import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
+import lombok.SneakyThrows;
 
 class EntryDataMapperTest {
 
+	@Spy
 	@InjectMocks
 	private EntryDataMapper mapper;
+	@Mock
+	private FormDataMapper formDataMapper;
 
 	@Spy
-	private ObjectMapper objectMapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+	private ObjectMapper objectMapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
 
 	@Nested
 	class TestMappingEntryData {
 
+		private InputStream jsonInput = TestUtils.loadFile("request/simple.json");
+
 		@Nested
 		class TestReadRequest {
 			@Test
 			void shouldReadJson() {
-				var jsonInput = TestUtils.loadFile("request/simple.json");
-
 				var read = mapper.readRequest(jsonInput);
 
 				assertThat(read).usingRecursiveComparison().isEqualTo(EntryDataTestFactory.create());
 			}
 		}
 
+		@Test
+		void shouldReadRequest() {
+			mapper.mapEntryData(jsonInput);
+
+			verify(mapper).readRequest(jsonInput);
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldCallFormDataMapper() {
+			var entryData = EntryDataTestFactory.create();
+			doReturn(entryData).when(objectMapper).readValue(any(InputStream.class), Mockito.<Class<EntryData>>any());
+
+			mapper.mapEntryData(jsonInput);
+
+			verify(formDataMapper).mapEntryData(entryData);
+		}
+
+		@Test
+		void shouldReturnMappedResult() {
+			FormData formData = FormDataTestFactory.create();
+			when(formDataMapper.mapEntryData(any())).thenReturn(formData);
+
+			var result = mapper.mapEntryData(jsonInput);
+
+			assertThat(result).isSameAs(formData);
+		}
 	}
 
 }
diff --git a/enterprise-adapter/src/test/resources/request/simple.json b/enterprise-adapter/src/test/resources/request/simple.json
index bd399f1cbee2c2fa7a4f2e677b19540199d8924b..f364c582730cb9d53566e23a5110878122e7156f 100644
--- a/enterprise-adapter/src/test/resources/request/simple.json
+++ b/enterprise-adapter/src/test/resources/request/simple.json
@@ -26,7 +26,7 @@
 				},
 				"nachname": {
 					"label": "Nachname",
-					"stringValue": "Test"
+					"stringValue": "Täst"
 				}
 			}
 		}