diff --git a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserController.java b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserController.java
index 31cfd86e0d4f9b7ab652143468c7a61666609e00..d0c6429b245ad650d6e5fe747d9db2fb48e88681 100644
--- a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserController.java
+++ b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserController.java
@@ -62,7 +62,7 @@ public class UserController {
     }
 
     @PostMapping("/login")
-    public String login(@RequestBody UserLoginDto dto) {
+    public String login(@Valid @RequestBody UserLoginDto dto) {
         return String.format("User %s has spawned", dto.getUsername());
     }
 
diff --git a/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/user/UserControllerTest.java b/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/user/UserControllerTest.java
index 0c6698043b0d4b9a5d635cd521dcd34657520c83..f1cd0beae361e0bfd37aea276431386dbbdc72ce 100644
--- a/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/user/UserControllerTest.java
+++ b/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/user/UserControllerTest.java
@@ -90,6 +90,14 @@ class UserControllerTest {
         return Stream.concat(invalidUsers, invalidAddressUsers.stream());
     }
 
+    private static Stream<UserLoginDto> invalidLoginDtoStream() {
+        return Stream.of(
+                new UserLoginDto("", "skkckdvssg4v83sfsDRHCVVB"),
+                new UserLoginDto("xnovak", ""),
+                new UserLoginDto(null, "skkckdvssg4v83sfsDRHCVVB"),
+                new UserLoginDto("xnovak", null));
+    }
+
     @Test
     void create() throws Exception {
         mockMvc.perform(post("/users")
@@ -172,6 +180,15 @@ class UserControllerTest {
                 .andExpect(status().isOk());
     }
 
+    @ParameterizedTest
+    @MethodSource("invalidLoginDtoStream")
+    void loginInvalidDto(UserLoginDto loginDto) throws Exception {
+        mockMvc.perform(post("/users/login")
+                        .content(asJsonString(loginDto))
+                        .contentType(MediaType.APPLICATION_JSON))
+                .andExpect(status().is4xxClientError());
+    }
+
     private static String asJsonString(final Object obj) throws JsonProcessingException {
         return new ObjectMapper().writeValueAsString(obj);
     }