Wenn ich meinen UserServieImpl ausführe, bekomme ich immer eine Exception, dass meine requestMap null ist. Ich kann mir aber nicht erklären, warum die requestMap nulll ist. Diese sind meine Implementierungen:
Meine Exception lautet dann
Kann mir vielleicht einer erklären, was falsch läuft?
Was auch komisch ist: Wenn ich an folgendes übergebe
und der User noch nicht existiert, erhalte ich eine Fehlermeldung, trotzdem wird der Eintrag in der Tabelle user angelegt?
Java:
package com.inn.cafe.rest;
import java.util.Map;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RequestMapping(path = "/user", method = {RequestMethod.GET, RequestMethod.POST})
public interface UserRest {
@PostMapping(path = "/signup")
public ResponseEntity<String> signup(@RequestBody(required = false) Map<String, String> requestMap);
}
Java:
package com.inn.cafe.restImpl;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;
import com.inn.cafe.constents.CafeConstants;
import com.inn.cafe.rest.UserRest;
import com.inn.cafe.service.UserService;
import com.inn.cafe.utils.CafeUtils;
@RestController
public class UserRestImpl implements UserRest {
@Autowired
UserService userService;
@Override
public ResponseEntity<String> signup(Map<String, String> requestMap) {
try {
userService.signup(requestMap);
} catch (Exception e) {
e.printStackTrace();
}
return CafeUtils.getResponseEntity(CafeConstants.SOMETHING_WENT_WRONG, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Java:
package com.inn.cafe.service;
import java.util.Map;
import org.springframework.http.ResponseEntity;
public interface UserService {
ResponseEntity<String> signup(Map<String, String> requestMap);
}
Java:
package com.inn.cafe.serviceImpl;
import java.util.Map;
import java.util.Objects;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import com.inn.cafe.POJO.User;
import com.inn.cafe.constents.CafeConstants;
import com.inn.cafe.dao.UserDao;
import com.inn.cafe.service.UserService;
import com.inn.cafe.utils.CafeUtils;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao;
@Override
public ResponseEntity<String> signup(Map<String, String> requestMap) {
log.info("Inside signup");
try {
if (validateSignupMap(requestMap)) {
User user = userDao.findByEmailId(requestMap.get("email"));
if (Objects.isNull(user)) {
userDao.save(getUserFromMap(requestMap));
return CafeUtils.getResponseEntity("Successfully Registered", HttpStatus.OK);
} else {
return CafeUtils.getResponseEntity("Email already exists", HttpStatus.BAD_REQUEST);
}
} else
return CafeUtils.getResponseEntity(CafeConstants.INVALID_DATA, HttpStatus.BAD_REQUEST);
} catch (Exception e) {
e.printStackTrace();
}
return CafeUtils.getResponseEntity(CafeConstants.SOMETHING_WENT_WRONG, HttpStatus.INTERNAL_SERVER_ERROR);
}
private boolean validateSignupMap(Map<String, String> requestMap) {
if (requestMap.containsKey("name") && requestMap.containsKey("contactNumber") && requestMap.containsKey("email")
&& requestMap.containsKey("password"))
return true;
else
return false;
}
private User getUserFromMap(Map<String, String> requestMap) {
User user = new User();
user.setName(requestMap.get("name"));
user.setContactNumber(requestMap.get("contactNumber"));
user.setEmail(requestMap.get("email"));
user.setPassword(requestMap.get("password"));
user.setStatus("false");
user.setRole("user");
return user;
}
}
Java:
package com.inn.cafe.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.query.Param;
import com.inn.cafe.POJO.User;
public interface UserDao extends JpaRepository<User, Integer> {
User findByEmailId(@Param("email") String email);
}
Meine Exception lautet dann
Code:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.1.2)
2023-08-09T18:14:20.531+02:00 INFO 1524 --- [ main] c.i.c.CafeManagementSystemApplication : Starting CafeManagementSystemApplication using Java 18.0.1.1 with PID 1524 (C:\Users\Downloads\com.inn.cafe\target\classes started by in C:\Users\Downloads\com.inn.cafe)
2023-08-09T18:14:20.533+02:00 INFO 1524 --- [ main] c.i.c.CafeManagementSystemApplication : No active profile set, falling back to 1 default profile: "default"
2023-08-09T18:14:21.100+02:00 INFO 1524 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2023-08-09T18:14:21.161+02:00 INFO 1524 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 51 ms. Found 1 JPA repository interfaces.
2023-08-09T18:14:21.740+02:00 INFO 1524 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-08-09T18:14:21.749+02:00 INFO 1524 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-08-09T18:14:21.749+02:00 INFO 1524 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.11]
2023-08-09T18:14:21.843+02:00 INFO 1524 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-08-09T18:14:21.844+02:00 INFO 1524 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1265 ms
2023-08-09T18:14:21.972+02:00 INFO 1524 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2023-08-09T18:14:22.019+02:00 INFO 1524 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.2.6.Final
2023-08-09T18:14:22.022+02:00 INFO 1524 --- [ main] org.hibernate.cfg.Environment : HHH000406: Using bytecode reflection optimizer
2023-08-09T18:14:22.148+02:00 INFO 1524 --- [ main] o.h.b.i.BytecodeProviderInitiator : HHH000021: Bytecode provider name : bytebuddy
2023-08-09T18:14:22.261+02:00 INFO 1524 --- [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
2023-08-09T18:14:22.274+02:00 INFO 1524 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2023-08-09T18:14:22.402+02:00 INFO 1524 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@23b1aa9
2023-08-09T18:14:22.403+02:00 INFO 1524 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2023-08-09T18:14:22.425+02:00 WARN 1524 --- [ main] org.hibernate.orm.deprecation : HHH90000026: MySQL8Dialect has been deprecated; use org.hibernate.dialect.MySQLDialect instead
2023-08-09T18:14:22.590+02:00 INFO 1524 --- [ main] o.h.b.i.BytecodeProviderInitiator : HHH000021: Bytecode provider name : bytebuddy
2023-08-09T18:14:23.040+02:00 INFO 1524 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2023-08-09T18:14:23.254+02:00 INFO 1524 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2023-08-09T18:14:23.468+02:00 INFO 1524 --- [ main] o.s.d.j.r.query.QueryEnhancerFactory : Hibernate is in classpath; If applicable, HQL parser will be used.
2023-08-09T18:14:23.606+02:00 WARN 1524 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2023-08-09T18:14:23.859+02:00 INFO 1524 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@68a1bb31, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@344f4a82, org.springframework.security.web.context.SecurityContextHolderFilter@7a79a5d6, org.springframework.security.web.header.HeaderWriterFilter@2a728076, org.springframework.security.web.authentication.logout.LogoutFilter@65067d37, com.inn.cafe.JWT.JwtFilter@2db4a84a, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1eaf4e77, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@23cfc9eb, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@1ecbb787, org.springframework.security.web.session.SessionManagementFilter@480f1311, org.springframework.security.web.access.ExceptionTranslationFilter@10efb806, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@1509bd56]
2023-08-09T18:14:24.062+02:00 INFO 1524 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-08-09T18:14:24.069+02:00 INFO 1524 --- [ main] c.i.c.CafeManagementSystemApplication : Started CafeManagementSystemApplication in 3.846 seconds (process running for 4.195)
2023-08-09T18:14:27.442+02:00 INFO 1524 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-08-09T18:14:27.442+02:00 INFO 1524 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2023-08-09T18:14:27.444+02:00 INFO 1524 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
2023-08-09T18:14:27.519+02:00 INFO 1524 --- [nio-8080-exec-2] c.inn.cafe.serviceImpl.UserServiceImpl : Inside signup
Hibernate:
select
u1_0.id,
u1_0.contact_number,
u1_0.email,
u1_0.name,
u1_0.password,
u1_0.role,
u1_0.status
from
user u1_0
where
u1_0.email=?
2023-08-09T18:14:27.627+02:00 INFO 1524 --- [nio-8080-exec-2] c.inn.cafe.serviceImpl.UserServiceImpl : Inside signup
java.lang.NullPointerException: Cannot invoke "java.util.Map.containsKey(Object)" because "requestMap" is null
at com.inn.cafe.serviceImpl.UserServiceImpl.validateSignupMap(UserServiceImpl.java:47)
at com.inn.cafe.serviceImpl.UserServiceImpl.signup(UserServiceImpl.java:30)
at com.inn.cafe.restImpl.UserRestImpl.signup(UserRestImpl.java:24)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:577)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365)
at com.inn.cafe.JWT.JwtFilter.doFilterInternal(JwtFilter.java:58)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)
at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)
Kann mir vielleicht einer erklären, was falsch läuft?
Was auch komisch ist: Wenn ich an folgendes übergebe
JSON:
{"name":"max","contactNumber":"0123456789","email":"max@muster.de","password":"maximizer"}
und der User noch nicht existiert, erhalte ich eine Fehlermeldung, trotzdem wird der Eintrag in der Tabelle user angelegt?