Java Spring RestFull API












5















im trying to learn how restful service works in java. but i came across this problem which i cant seem to figure out. i'm trying to call this controller to which will take data and store it in a database. but the exception i get is something i haven't came across before. if i remove the model class as a parameter and try to return just a basic string it works fine. but my goal is to store what ever data that is passed to the controller in a database.



enter code here


person.java // model class



@Entity
@Table(name = "Person")
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"}, allowGetters = true)

public class Person implements Serializable {

@JsonProperty("key")
public int getKey() {
return key;
}

public void setKey(int key) {
this.key = key;
}


@JsonProperty("name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

@JsonProperty("m")
public int getMotherKey() {
return motherKey;
}
public void setMotherKey(int motherKey) {
this.motherKey = motherKey;
}
@JsonProperty("f")
public int getFatherKey() {
return fatherKey;
}
public void setFatherKey(int fatherKey) {
this.fatherKey = fatherKey;
}

@JsonProperty("dob")
public int getDateOfBirth() {
return DateOfBirth;
}
public void setDateOfBirth(int dateOfBirth) {
DateOfBirth = dateOfBirth;
}

@JsonProperty("g")
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}



public Person() {



}


@NotNull
int key;
@NotBlank
String name;
@NotNull
int motherKey;
@NotNull
int fatherKey;
@NotNull
int DateOfBirth; //19921210->December 10th 1992
@NotBlank
String gender;


**Controller class **



package com.example.FamilyTree;
import java.util.List;
import javax.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
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.RestController;
import Repository.TreeRepository;
import exception.ResourceNotFoundException;
import model.Person;




@RestController
@RequestMapping("/api")
public class FamilityTreeController {


TreeRepository treeRepository;



@PostMapping("/addPerson")
public Person addPerson(@Valid @RequestBody Person person) {


return treeRepository.save( person);

}
}


Exception
at



com.example.FamilyTree.FamilityTreeController.addPerson(FamilityTreeController.java:32) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.13.jar:9.0.13]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) [na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.13.jar:9.0.13]
at java.base/java.lang.Thread.run(Thread.java:844) [na:na]


Respository



package Repository;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.JpaRepository;

import model.Person;


public interface TreeRepository extends JpaRepository<Person, Integer> {



}


enter image description here



Full stack trace from Postman



{
"timestamp": "2019-01-03T14:06:28.971+0000",
"status": 500,
"error": "Internal Server Error",
"message": "No message available",
"trace": "java.lang.NullPointerExceptionntat com.example.FamilyTree.FamilityTreeController.addPerson(FamilityTreeController.java:27)ntat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)ntat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)ntat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)ntat java.base/java.lang.reflect.Method.invoke(Method.java:564)ntat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)ntat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)ntat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)ntat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)ntat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)ntat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)ntat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)ntat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)ntat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)ntat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)ntat javax.servlet.http.HttpServlet.service(HttpServlet.java:660)ntat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)ntat javax.servlet.http.HttpServlet.service(HttpServlet.java:741)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)ntat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)ntat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)ntat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)ntat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)ntat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)ntat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)ntat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)ntat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)ntat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791)ntat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)ntat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)ntat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)ntat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)ntat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)ntat java.base/java.lang.Thread.run(Thread.java:844)n",
"path": "/api/addPerson"
}


**FamilyTreeApplication class **



package com.example.FamilyTree;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

import controller.FamilityTreeController;

@SpringBootApplication
@EnableJpaAuditing
public class FamilyTreeApplication {
public static void main(String args) {
SpringApplication.run(FamilyTreeApplication.class, args);
}

}


updated Packages structure
enter image description here



**cmd **



 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:662) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:188) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863) ~[spring-context-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at com.example.FamilyTree.FamilyTreeApplication.main(FamilyTreeApplication.java:22) [classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.1.1.RELEASE.jar:2.1.1.RELEASE]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1745) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
... 26 common frames omitted
Caused by: java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.util.Assert.notEmpty(Assert.java:464) ~[spring-core-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.<init>(JpaMetamodelMappingContext.java:57) ~[spring-data-jpa-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:80) ~[spring-data-jpa-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:44) ~[spring-data-jpa-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:142) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
... 33 common frames omitted









share|improve this question

























  • Comments are not for extended discussion; this conversation has been moved to chat.

    – Samuel Liew
    Jan 3 at 23:13
















5















im trying to learn how restful service works in java. but i came across this problem which i cant seem to figure out. i'm trying to call this controller to which will take data and store it in a database. but the exception i get is something i haven't came across before. if i remove the model class as a parameter and try to return just a basic string it works fine. but my goal is to store what ever data that is passed to the controller in a database.



enter code here


person.java // model class



@Entity
@Table(name = "Person")
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"}, allowGetters = true)

public class Person implements Serializable {

@JsonProperty("key")
public int getKey() {
return key;
}

public void setKey(int key) {
this.key = key;
}


@JsonProperty("name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

@JsonProperty("m")
public int getMotherKey() {
return motherKey;
}
public void setMotherKey(int motherKey) {
this.motherKey = motherKey;
}
@JsonProperty("f")
public int getFatherKey() {
return fatherKey;
}
public void setFatherKey(int fatherKey) {
this.fatherKey = fatherKey;
}

@JsonProperty("dob")
public int getDateOfBirth() {
return DateOfBirth;
}
public void setDateOfBirth(int dateOfBirth) {
DateOfBirth = dateOfBirth;
}

@JsonProperty("g")
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}



public Person() {



}


@NotNull
int key;
@NotBlank
String name;
@NotNull
int motherKey;
@NotNull
int fatherKey;
@NotNull
int DateOfBirth; //19921210->December 10th 1992
@NotBlank
String gender;


**Controller class **



package com.example.FamilyTree;
import java.util.List;
import javax.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
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.RestController;
import Repository.TreeRepository;
import exception.ResourceNotFoundException;
import model.Person;




@RestController
@RequestMapping("/api")
public class FamilityTreeController {


TreeRepository treeRepository;



@PostMapping("/addPerson")
public Person addPerson(@Valid @RequestBody Person person) {


return treeRepository.save( person);

}
}


Exception
at



com.example.FamilyTree.FamilityTreeController.addPerson(FamilityTreeController.java:32) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.13.jar:9.0.13]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) [na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.13.jar:9.0.13]
at java.base/java.lang.Thread.run(Thread.java:844) [na:na]


Respository



package Repository;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.JpaRepository;

import model.Person;


public interface TreeRepository extends JpaRepository<Person, Integer> {



}


enter image description here



Full stack trace from Postman



{
"timestamp": "2019-01-03T14:06:28.971+0000",
"status": 500,
"error": "Internal Server Error",
"message": "No message available",
"trace": "java.lang.NullPointerExceptionntat com.example.FamilyTree.FamilityTreeController.addPerson(FamilityTreeController.java:27)ntat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)ntat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)ntat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)ntat java.base/java.lang.reflect.Method.invoke(Method.java:564)ntat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)ntat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)ntat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)ntat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)ntat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)ntat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)ntat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)ntat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)ntat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)ntat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)ntat javax.servlet.http.HttpServlet.service(HttpServlet.java:660)ntat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)ntat javax.servlet.http.HttpServlet.service(HttpServlet.java:741)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)ntat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)ntat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)ntat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)ntat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)ntat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)ntat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)ntat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)ntat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)ntat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791)ntat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)ntat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)ntat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)ntat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)ntat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)ntat java.base/java.lang.Thread.run(Thread.java:844)n",
"path": "/api/addPerson"
}


**FamilyTreeApplication class **



package com.example.FamilyTree;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

import controller.FamilityTreeController;

@SpringBootApplication
@EnableJpaAuditing
public class FamilyTreeApplication {
public static void main(String args) {
SpringApplication.run(FamilyTreeApplication.class, args);
}

}


updated Packages structure
enter image description here



**cmd **



 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:662) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:188) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863) ~[spring-context-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at com.example.FamilyTree.FamilyTreeApplication.main(FamilyTreeApplication.java:22) [classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.1.1.RELEASE.jar:2.1.1.RELEASE]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1745) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
... 26 common frames omitted
Caused by: java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.util.Assert.notEmpty(Assert.java:464) ~[spring-core-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.<init>(JpaMetamodelMappingContext.java:57) ~[spring-data-jpa-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:80) ~[spring-data-jpa-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:44) ~[spring-data-jpa-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:142) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
... 33 common frames omitted









share|improve this question

























  • Comments are not for extended discussion; this conversation has been moved to chat.

    – Samuel Liew
    Jan 3 at 23:13














5












5








5








im trying to learn how restful service works in java. but i came across this problem which i cant seem to figure out. i'm trying to call this controller to which will take data and store it in a database. but the exception i get is something i haven't came across before. if i remove the model class as a parameter and try to return just a basic string it works fine. but my goal is to store what ever data that is passed to the controller in a database.



enter code here


person.java // model class



@Entity
@Table(name = "Person")
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"}, allowGetters = true)

public class Person implements Serializable {

@JsonProperty("key")
public int getKey() {
return key;
}

public void setKey(int key) {
this.key = key;
}


@JsonProperty("name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

@JsonProperty("m")
public int getMotherKey() {
return motherKey;
}
public void setMotherKey(int motherKey) {
this.motherKey = motherKey;
}
@JsonProperty("f")
public int getFatherKey() {
return fatherKey;
}
public void setFatherKey(int fatherKey) {
this.fatherKey = fatherKey;
}

@JsonProperty("dob")
public int getDateOfBirth() {
return DateOfBirth;
}
public void setDateOfBirth(int dateOfBirth) {
DateOfBirth = dateOfBirth;
}

@JsonProperty("g")
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}



public Person() {



}


@NotNull
int key;
@NotBlank
String name;
@NotNull
int motherKey;
@NotNull
int fatherKey;
@NotNull
int DateOfBirth; //19921210->December 10th 1992
@NotBlank
String gender;


**Controller class **



package com.example.FamilyTree;
import java.util.List;
import javax.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
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.RestController;
import Repository.TreeRepository;
import exception.ResourceNotFoundException;
import model.Person;




@RestController
@RequestMapping("/api")
public class FamilityTreeController {


TreeRepository treeRepository;



@PostMapping("/addPerson")
public Person addPerson(@Valid @RequestBody Person person) {


return treeRepository.save( person);

}
}


Exception
at



com.example.FamilyTree.FamilityTreeController.addPerson(FamilityTreeController.java:32) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.13.jar:9.0.13]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) [na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.13.jar:9.0.13]
at java.base/java.lang.Thread.run(Thread.java:844) [na:na]


Respository



package Repository;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.JpaRepository;

import model.Person;


public interface TreeRepository extends JpaRepository<Person, Integer> {



}


enter image description here



Full stack trace from Postman



{
"timestamp": "2019-01-03T14:06:28.971+0000",
"status": 500,
"error": "Internal Server Error",
"message": "No message available",
"trace": "java.lang.NullPointerExceptionntat com.example.FamilyTree.FamilityTreeController.addPerson(FamilityTreeController.java:27)ntat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)ntat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)ntat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)ntat java.base/java.lang.reflect.Method.invoke(Method.java:564)ntat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)ntat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)ntat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)ntat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)ntat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)ntat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)ntat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)ntat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)ntat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)ntat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)ntat javax.servlet.http.HttpServlet.service(HttpServlet.java:660)ntat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)ntat javax.servlet.http.HttpServlet.service(HttpServlet.java:741)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)ntat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)ntat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)ntat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)ntat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)ntat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)ntat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)ntat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)ntat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)ntat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791)ntat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)ntat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)ntat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)ntat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)ntat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)ntat java.base/java.lang.Thread.run(Thread.java:844)n",
"path": "/api/addPerson"
}


**FamilyTreeApplication class **



package com.example.FamilyTree;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

import controller.FamilityTreeController;

@SpringBootApplication
@EnableJpaAuditing
public class FamilyTreeApplication {
public static void main(String args) {
SpringApplication.run(FamilyTreeApplication.class, args);
}

}


updated Packages structure
enter image description here



**cmd **



 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:662) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:188) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863) ~[spring-context-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at com.example.FamilyTree.FamilyTreeApplication.main(FamilyTreeApplication.java:22) [classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.1.1.RELEASE.jar:2.1.1.RELEASE]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1745) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
... 26 common frames omitted
Caused by: java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.util.Assert.notEmpty(Assert.java:464) ~[spring-core-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.<init>(JpaMetamodelMappingContext.java:57) ~[spring-data-jpa-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:80) ~[spring-data-jpa-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:44) ~[spring-data-jpa-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:142) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
... 33 common frames omitted









share|improve this question
















im trying to learn how restful service works in java. but i came across this problem which i cant seem to figure out. i'm trying to call this controller to which will take data and store it in a database. but the exception i get is something i haven't came across before. if i remove the model class as a parameter and try to return just a basic string it works fine. but my goal is to store what ever data that is passed to the controller in a database.



enter code here


person.java // model class



@Entity
@Table(name = "Person")
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"}, allowGetters = true)

public class Person implements Serializable {

@JsonProperty("key")
public int getKey() {
return key;
}

public void setKey(int key) {
this.key = key;
}


@JsonProperty("name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

@JsonProperty("m")
public int getMotherKey() {
return motherKey;
}
public void setMotherKey(int motherKey) {
this.motherKey = motherKey;
}
@JsonProperty("f")
public int getFatherKey() {
return fatherKey;
}
public void setFatherKey(int fatherKey) {
this.fatherKey = fatherKey;
}

@JsonProperty("dob")
public int getDateOfBirth() {
return DateOfBirth;
}
public void setDateOfBirth(int dateOfBirth) {
DateOfBirth = dateOfBirth;
}

@JsonProperty("g")
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}



public Person() {



}


@NotNull
int key;
@NotBlank
String name;
@NotNull
int motherKey;
@NotNull
int fatherKey;
@NotNull
int DateOfBirth; //19921210->December 10th 1992
@NotBlank
String gender;


**Controller class **



package com.example.FamilyTree;
import java.util.List;
import javax.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
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.RestController;
import Repository.TreeRepository;
import exception.ResourceNotFoundException;
import model.Person;




@RestController
@RequestMapping("/api")
public class FamilityTreeController {


TreeRepository treeRepository;



@PostMapping("/addPerson")
public Person addPerson(@Valid @RequestBody Person person) {


return treeRepository.save( person);

}
}


Exception
at



com.example.FamilyTree.FamilityTreeController.addPerson(FamilityTreeController.java:32) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) ~[spring-webmvc-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-embed-core-9.0.13.jar:9.0.13]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.13.jar:9.0.13]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) [na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.13.jar:9.0.13]
at java.base/java.lang.Thread.run(Thread.java:844) [na:na]


Respository



package Repository;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.JpaRepository;

import model.Person;


public interface TreeRepository extends JpaRepository<Person, Integer> {



}


enter image description here



Full stack trace from Postman



{
"timestamp": "2019-01-03T14:06:28.971+0000",
"status": 500,
"error": "Internal Server Error",
"message": "No message available",
"trace": "java.lang.NullPointerExceptionntat com.example.FamilyTree.FamilityTreeController.addPerson(FamilityTreeController.java:27)ntat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)ntat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)ntat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)ntat java.base/java.lang.reflect.Method.invoke(Method.java:564)ntat org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)ntat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)ntat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)ntat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)ntat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)ntat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)ntat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)ntat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)ntat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)ntat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)ntat javax.servlet.http.HttpServlet.service(HttpServlet.java:660)ntat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)ntat javax.servlet.http.HttpServlet.service(HttpServlet.java:741)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)ntat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)ntat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)ntat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)ntat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)ntat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)ntat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)ntat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)ntat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)ntat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)ntat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)ntat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)ntat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)ntat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791)ntat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)ntat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)ntat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)ntat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)ntat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)ntat java.base/java.lang.Thread.run(Thread.java:844)n",
"path": "/api/addPerson"
}


**FamilyTreeApplication class **



package com.example.FamilyTree;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

import controller.FamilityTreeController;

@SpringBootApplication
@EnableJpaAuditing
public class FamilyTreeApplication {
public static void main(String args) {
SpringApplication.run(FamilyTreeApplication.class, args);
}

}


updated Packages structure
enter image description here



**cmd **



 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:662) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:188) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863) ~[spring-context-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at com.example.FamilyTree.FamilyTreeApplication.main(FamilyTreeApplication.java:22) [classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.1.1.RELEASE.jar:2.1.1.RELEASE]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1745) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:367) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
... 26 common frames omitted
Caused by: java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.util.Assert.notEmpty(Assert.java:464) ~[spring-core-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.<init>(JpaMetamodelMappingContext.java:57) ~[spring-data-jpa-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:80) ~[spring-data-jpa-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:44) ~[spring-data-jpa-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:142) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
... 33 common frames omitted






java spring maven jpa






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 3 at 16:16







al_khalid

















asked Jan 3 at 13:13









al_khalidal_khalid

92111




92111













  • Comments are not for extended discussion; this conversation has been moved to chat.

    – Samuel Liew
    Jan 3 at 23:13



















  • Comments are not for extended discussion; this conversation has been moved to chat.

    – Samuel Liew
    Jan 3 at 23:13

















Comments are not for extended discussion; this conversation has been moved to chat.

– Samuel Liew
Jan 3 at 23:13





Comments are not for extended discussion; this conversation has been moved to chat.

– Samuel Liew
Jan 3 at 23:13












3 Answers
3






active

oldest

votes


















5














The problem is that treeRepository is not injected by Spring and thus is null.



First, make sure that the TreeRepository is properly configured by adding @EnableJpaRepositories(basePackages = "<package of your repository interface>")) to your Spring config class (FamilyTreeApplication).



Then to inject it properly, you should either add an @Autowired annotation :



@Autowired
private TreeRepository treeRepository;


or have it injected in a constructor, which is the preferred way according to the Spring team.



private TreeRepository treeRepository;

//@Autowired not needed, implicit as of Spring 4.3
public FamilityTreeController(TreeRepository treeRepository) {
this.treeRepository = treeRepository;
}


Also there's something off with your package hierarchy that might impact how components are found by Spring Boot : your main config class (FamilyTreeApplication) should be located in the app "base package" and all other classes in sub packages, something like that :



com.example.familytree
|_ FamilyTreeApplication.java
|_ controller
|_ FamilyTreeController.java
|_ repository
|_ TreeRepositry.java
...





share|improve this answer





















  • 2





    @al_khalid I don't see @EnableJpaRepositories in your config class as I suggested.

    – Matt
    Jan 3 at 15:06



















0














You are missing the @Repository annotation on your repository:



@Repository
public interface TreeRepository extends JpaRepository<Person, Integer> { }


And remember to add the @Autowired to inject the repository:



    @Autowired
private TreeRepository treeRepository;


UPDATE



It seems Spring is not able to find the bean even with @Repository added. I would suggest you to put all your packages under com.example and add a component scan configuration referencing that package.






share|improve this answer


























  • adding @autowired causing the following exception org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'respository.TreeRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    – al_khalid
    Jan 3 at 14:41











  • Are you using any kind of component scan on your project? Please post it in the question, it seems even with @Repository added Spring is not able to see it

    – ngueno
    Jan 3 at 14:43






  • 1





    You don't need to add the @Repository annotation with Spring Data. Make sure, your JpaRepository is configured properly (See my answer)

    – Matt
    Jan 3 at 14:44






  • 1





    @ngueno component scan is done by default with Spring Boot, but it will not find the repository as it should be generated by Spring Data first (and is already to Spring context)

    – Matt
    Jan 3 at 15:00






  • 1





    The SpringBootApplication annotation includes @ComponentScan (amongst other things) and if you don't specify any base package, it will scan from the package of the config class. But it doesn't hurt to add it, because Spring Boot is doing so many things automatically that it's difficult for junior developers to understand what's happening under the hood.

    – Matt
    Jan 3 at 15:37



















0














It is best if you use a service class




This annotation serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning.




@Service
public class TreeService {
@Autowired
TreeRepository treeRepository;

public Person save(Person person) {
return treeRepository.save(person);
}
}


Change your Controller class as this:



@RestController
@RequestMapping("/api")
public class FamilityTreeController {

@Autowired
TreeService treeService;

@PostMapping("/addPerson")
public Person addPerson(@Valid @RequestBody Person person) {
return treeService.save( person);
}
}


Please make the package names lowercase and follow the naming convention:



Change this: Repository.TreeRepository to this: com.example.repository.TreeRepository and for others too: com.example.model.Person com.example.exception.ResourceNotFoundException






share|improve this answer
























  • org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.services.TreeService.TreeService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    – al_khalid
    Jan 3 at 15:13











  • i get the following exception when compiling

    – al_khalid
    Jan 3 at 15:13











  • com.example.services.TreeService.TreeService I hope you have created a package with the name com.example.services.TreeService and TressService java class in it.

    – Nikhil
    Jan 3 at 15:16













  • It is best if you use the naming convention for packages as lowercase. Uppercase is for class names.

    – Nikhil
    Jan 3 at 15:17






  • 1





    I recommend you follow this tutorial. It is old but really good for learning Spring Boot youtube.com/watch?v=msXL2oDexqw

    – Nikhil
    Jan 3 at 15:53












Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54023019%2fjava-spring-restfull-api%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























3 Answers
3






active

oldest

votes








3 Answers
3






active

oldest

votes









active

oldest

votes






active

oldest

votes









5














The problem is that treeRepository is not injected by Spring and thus is null.



First, make sure that the TreeRepository is properly configured by adding @EnableJpaRepositories(basePackages = "<package of your repository interface>")) to your Spring config class (FamilyTreeApplication).



Then to inject it properly, you should either add an @Autowired annotation :



@Autowired
private TreeRepository treeRepository;


or have it injected in a constructor, which is the preferred way according to the Spring team.



private TreeRepository treeRepository;

//@Autowired not needed, implicit as of Spring 4.3
public FamilityTreeController(TreeRepository treeRepository) {
this.treeRepository = treeRepository;
}


Also there's something off with your package hierarchy that might impact how components are found by Spring Boot : your main config class (FamilyTreeApplication) should be located in the app "base package" and all other classes in sub packages, something like that :



com.example.familytree
|_ FamilyTreeApplication.java
|_ controller
|_ FamilyTreeController.java
|_ repository
|_ TreeRepositry.java
...





share|improve this answer





















  • 2





    @al_khalid I don't see @EnableJpaRepositories in your config class as I suggested.

    – Matt
    Jan 3 at 15:06
















5














The problem is that treeRepository is not injected by Spring and thus is null.



First, make sure that the TreeRepository is properly configured by adding @EnableJpaRepositories(basePackages = "<package of your repository interface>")) to your Spring config class (FamilyTreeApplication).



Then to inject it properly, you should either add an @Autowired annotation :



@Autowired
private TreeRepository treeRepository;


or have it injected in a constructor, which is the preferred way according to the Spring team.



private TreeRepository treeRepository;

//@Autowired not needed, implicit as of Spring 4.3
public FamilityTreeController(TreeRepository treeRepository) {
this.treeRepository = treeRepository;
}


Also there's something off with your package hierarchy that might impact how components are found by Spring Boot : your main config class (FamilyTreeApplication) should be located in the app "base package" and all other classes in sub packages, something like that :



com.example.familytree
|_ FamilyTreeApplication.java
|_ controller
|_ FamilyTreeController.java
|_ repository
|_ TreeRepositry.java
...





share|improve this answer





















  • 2





    @al_khalid I don't see @EnableJpaRepositories in your config class as I suggested.

    – Matt
    Jan 3 at 15:06














5












5








5







The problem is that treeRepository is not injected by Spring and thus is null.



First, make sure that the TreeRepository is properly configured by adding @EnableJpaRepositories(basePackages = "<package of your repository interface>")) to your Spring config class (FamilyTreeApplication).



Then to inject it properly, you should either add an @Autowired annotation :



@Autowired
private TreeRepository treeRepository;


or have it injected in a constructor, which is the preferred way according to the Spring team.



private TreeRepository treeRepository;

//@Autowired not needed, implicit as of Spring 4.3
public FamilityTreeController(TreeRepository treeRepository) {
this.treeRepository = treeRepository;
}


Also there's something off with your package hierarchy that might impact how components are found by Spring Boot : your main config class (FamilyTreeApplication) should be located in the app "base package" and all other classes in sub packages, something like that :



com.example.familytree
|_ FamilyTreeApplication.java
|_ controller
|_ FamilyTreeController.java
|_ repository
|_ TreeRepositry.java
...





share|improve this answer















The problem is that treeRepository is not injected by Spring and thus is null.



First, make sure that the TreeRepository is properly configured by adding @EnableJpaRepositories(basePackages = "<package of your repository interface>")) to your Spring config class (FamilyTreeApplication).



Then to inject it properly, you should either add an @Autowired annotation :



@Autowired
private TreeRepository treeRepository;


or have it injected in a constructor, which is the preferred way according to the Spring team.



private TreeRepository treeRepository;

//@Autowired not needed, implicit as of Spring 4.3
public FamilityTreeController(TreeRepository treeRepository) {
this.treeRepository = treeRepository;
}


Also there's something off with your package hierarchy that might impact how components are found by Spring Boot : your main config class (FamilyTreeApplication) should be located in the app "base package" and all other classes in sub packages, something like that :



com.example.familytree
|_ FamilyTreeApplication.java
|_ controller
|_ FamilyTreeController.java
|_ repository
|_ TreeRepositry.java
...






share|improve this answer














share|improve this answer



share|improve this answer








edited Jan 3 at 15:17

























answered Jan 3 at 14:41









MattMatt

1,77211522




1,77211522








  • 2





    @al_khalid I don't see @EnableJpaRepositories in your config class as I suggested.

    – Matt
    Jan 3 at 15:06














  • 2





    @al_khalid I don't see @EnableJpaRepositories in your config class as I suggested.

    – Matt
    Jan 3 at 15:06








2




2





@al_khalid I don't see @EnableJpaRepositories in your config class as I suggested.

– Matt
Jan 3 at 15:06





@al_khalid I don't see @EnableJpaRepositories in your config class as I suggested.

– Matt
Jan 3 at 15:06













0














You are missing the @Repository annotation on your repository:



@Repository
public interface TreeRepository extends JpaRepository<Person, Integer> { }


And remember to add the @Autowired to inject the repository:



    @Autowired
private TreeRepository treeRepository;


UPDATE



It seems Spring is not able to find the bean even with @Repository added. I would suggest you to put all your packages under com.example and add a component scan configuration referencing that package.






share|improve this answer


























  • adding @autowired causing the following exception org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'respository.TreeRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    – al_khalid
    Jan 3 at 14:41











  • Are you using any kind of component scan on your project? Please post it in the question, it seems even with @Repository added Spring is not able to see it

    – ngueno
    Jan 3 at 14:43






  • 1





    You don't need to add the @Repository annotation with Spring Data. Make sure, your JpaRepository is configured properly (See my answer)

    – Matt
    Jan 3 at 14:44






  • 1





    @ngueno component scan is done by default with Spring Boot, but it will not find the repository as it should be generated by Spring Data first (and is already to Spring context)

    – Matt
    Jan 3 at 15:00






  • 1





    The SpringBootApplication annotation includes @ComponentScan (amongst other things) and if you don't specify any base package, it will scan from the package of the config class. But it doesn't hurt to add it, because Spring Boot is doing so many things automatically that it's difficult for junior developers to understand what's happening under the hood.

    – Matt
    Jan 3 at 15:37
















0














You are missing the @Repository annotation on your repository:



@Repository
public interface TreeRepository extends JpaRepository<Person, Integer> { }


And remember to add the @Autowired to inject the repository:



    @Autowired
private TreeRepository treeRepository;


UPDATE



It seems Spring is not able to find the bean even with @Repository added. I would suggest you to put all your packages under com.example and add a component scan configuration referencing that package.






share|improve this answer


























  • adding @autowired causing the following exception org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'respository.TreeRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    – al_khalid
    Jan 3 at 14:41











  • Are you using any kind of component scan on your project? Please post it in the question, it seems even with @Repository added Spring is not able to see it

    – ngueno
    Jan 3 at 14:43






  • 1





    You don't need to add the @Repository annotation with Spring Data. Make sure, your JpaRepository is configured properly (See my answer)

    – Matt
    Jan 3 at 14:44






  • 1





    @ngueno component scan is done by default with Spring Boot, but it will not find the repository as it should be generated by Spring Data first (and is already to Spring context)

    – Matt
    Jan 3 at 15:00






  • 1





    The SpringBootApplication annotation includes @ComponentScan (amongst other things) and if you don't specify any base package, it will scan from the package of the config class. But it doesn't hurt to add it, because Spring Boot is doing so many things automatically that it's difficult for junior developers to understand what's happening under the hood.

    – Matt
    Jan 3 at 15:37














0












0








0







You are missing the @Repository annotation on your repository:



@Repository
public interface TreeRepository extends JpaRepository<Person, Integer> { }


And remember to add the @Autowired to inject the repository:



    @Autowired
private TreeRepository treeRepository;


UPDATE



It seems Spring is not able to find the bean even with @Repository added. I would suggest you to put all your packages under com.example and add a component scan configuration referencing that package.






share|improve this answer















You are missing the @Repository annotation on your repository:



@Repository
public interface TreeRepository extends JpaRepository<Person, Integer> { }


And remember to add the @Autowired to inject the repository:



    @Autowired
private TreeRepository treeRepository;


UPDATE



It seems Spring is not able to find the bean even with @Repository added. I would suggest you to put all your packages under com.example and add a component scan configuration referencing that package.







share|improve this answer














share|improve this answer



share|improve this answer








edited Jan 3 at 14:45

























answered Jan 3 at 14:35









nguenongueno

94111019




94111019













  • adding @autowired causing the following exception org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'respository.TreeRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    – al_khalid
    Jan 3 at 14:41











  • Are you using any kind of component scan on your project? Please post it in the question, it seems even with @Repository added Spring is not able to see it

    – ngueno
    Jan 3 at 14:43






  • 1





    You don't need to add the @Repository annotation with Spring Data. Make sure, your JpaRepository is configured properly (See my answer)

    – Matt
    Jan 3 at 14:44






  • 1





    @ngueno component scan is done by default with Spring Boot, but it will not find the repository as it should be generated by Spring Data first (and is already to Spring context)

    – Matt
    Jan 3 at 15:00






  • 1





    The SpringBootApplication annotation includes @ComponentScan (amongst other things) and if you don't specify any base package, it will scan from the package of the config class. But it doesn't hurt to add it, because Spring Boot is doing so many things automatically that it's difficult for junior developers to understand what's happening under the hood.

    – Matt
    Jan 3 at 15:37



















  • adding @autowired causing the following exception org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'respository.TreeRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    – al_khalid
    Jan 3 at 14:41











  • Are you using any kind of component scan on your project? Please post it in the question, it seems even with @Repository added Spring is not able to see it

    – ngueno
    Jan 3 at 14:43






  • 1





    You don't need to add the @Repository annotation with Spring Data. Make sure, your JpaRepository is configured properly (See my answer)

    – Matt
    Jan 3 at 14:44






  • 1





    @ngueno component scan is done by default with Spring Boot, but it will not find the repository as it should be generated by Spring Data first (and is already to Spring context)

    – Matt
    Jan 3 at 15:00






  • 1





    The SpringBootApplication annotation includes @ComponentScan (amongst other things) and if you don't specify any base package, it will scan from the package of the config class. But it doesn't hurt to add it, because Spring Boot is doing so many things automatically that it's difficult for junior developers to understand what's happening under the hood.

    – Matt
    Jan 3 at 15:37

















adding @autowired causing the following exception org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'respository.TreeRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

– al_khalid
Jan 3 at 14:41





adding @autowired causing the following exception org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'respository.TreeRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

– al_khalid
Jan 3 at 14:41













Are you using any kind of component scan on your project? Please post it in the question, it seems even with @Repository added Spring is not able to see it

– ngueno
Jan 3 at 14:43





Are you using any kind of component scan on your project? Please post it in the question, it seems even with @Repository added Spring is not able to see it

– ngueno
Jan 3 at 14:43




1




1





You don't need to add the @Repository annotation with Spring Data. Make sure, your JpaRepository is configured properly (See my answer)

– Matt
Jan 3 at 14:44





You don't need to add the @Repository annotation with Spring Data. Make sure, your JpaRepository is configured properly (See my answer)

– Matt
Jan 3 at 14:44




1




1





@ngueno component scan is done by default with Spring Boot, but it will not find the repository as it should be generated by Spring Data first (and is already to Spring context)

– Matt
Jan 3 at 15:00





@ngueno component scan is done by default with Spring Boot, but it will not find the repository as it should be generated by Spring Data first (and is already to Spring context)

– Matt
Jan 3 at 15:00




1




1





The SpringBootApplication annotation includes @ComponentScan (amongst other things) and if you don't specify any base package, it will scan from the package of the config class. But it doesn't hurt to add it, because Spring Boot is doing so many things automatically that it's difficult for junior developers to understand what's happening under the hood.

– Matt
Jan 3 at 15:37





The SpringBootApplication annotation includes @ComponentScan (amongst other things) and if you don't specify any base package, it will scan from the package of the config class. But it doesn't hurt to add it, because Spring Boot is doing so many things automatically that it's difficult for junior developers to understand what's happening under the hood.

– Matt
Jan 3 at 15:37











0














It is best if you use a service class




This annotation serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning.




@Service
public class TreeService {
@Autowired
TreeRepository treeRepository;

public Person save(Person person) {
return treeRepository.save(person);
}
}


Change your Controller class as this:



@RestController
@RequestMapping("/api")
public class FamilityTreeController {

@Autowired
TreeService treeService;

@PostMapping("/addPerson")
public Person addPerson(@Valid @RequestBody Person person) {
return treeService.save( person);
}
}


Please make the package names lowercase and follow the naming convention:



Change this: Repository.TreeRepository to this: com.example.repository.TreeRepository and for others too: com.example.model.Person com.example.exception.ResourceNotFoundException






share|improve this answer
























  • org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.services.TreeService.TreeService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    – al_khalid
    Jan 3 at 15:13











  • i get the following exception when compiling

    – al_khalid
    Jan 3 at 15:13











  • com.example.services.TreeService.TreeService I hope you have created a package with the name com.example.services.TreeService and TressService java class in it.

    – Nikhil
    Jan 3 at 15:16













  • It is best if you use the naming convention for packages as lowercase. Uppercase is for class names.

    – Nikhil
    Jan 3 at 15:17






  • 1





    I recommend you follow this tutorial. It is old but really good for learning Spring Boot youtube.com/watch?v=msXL2oDexqw

    – Nikhil
    Jan 3 at 15:53
















0














It is best if you use a service class




This annotation serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning.




@Service
public class TreeService {
@Autowired
TreeRepository treeRepository;

public Person save(Person person) {
return treeRepository.save(person);
}
}


Change your Controller class as this:



@RestController
@RequestMapping("/api")
public class FamilityTreeController {

@Autowired
TreeService treeService;

@PostMapping("/addPerson")
public Person addPerson(@Valid @RequestBody Person person) {
return treeService.save( person);
}
}


Please make the package names lowercase and follow the naming convention:



Change this: Repository.TreeRepository to this: com.example.repository.TreeRepository and for others too: com.example.model.Person com.example.exception.ResourceNotFoundException






share|improve this answer
























  • org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.services.TreeService.TreeService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    – al_khalid
    Jan 3 at 15:13











  • i get the following exception when compiling

    – al_khalid
    Jan 3 at 15:13











  • com.example.services.TreeService.TreeService I hope you have created a package with the name com.example.services.TreeService and TressService java class in it.

    – Nikhil
    Jan 3 at 15:16













  • It is best if you use the naming convention for packages as lowercase. Uppercase is for class names.

    – Nikhil
    Jan 3 at 15:17






  • 1





    I recommend you follow this tutorial. It is old but really good for learning Spring Boot youtube.com/watch?v=msXL2oDexqw

    – Nikhil
    Jan 3 at 15:53














0












0








0







It is best if you use a service class




This annotation serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning.




@Service
public class TreeService {
@Autowired
TreeRepository treeRepository;

public Person save(Person person) {
return treeRepository.save(person);
}
}


Change your Controller class as this:



@RestController
@RequestMapping("/api")
public class FamilityTreeController {

@Autowired
TreeService treeService;

@PostMapping("/addPerson")
public Person addPerson(@Valid @RequestBody Person person) {
return treeService.save( person);
}
}


Please make the package names lowercase and follow the naming convention:



Change this: Repository.TreeRepository to this: com.example.repository.TreeRepository and for others too: com.example.model.Person com.example.exception.ResourceNotFoundException






share|improve this answer













It is best if you use a service class




This annotation serves as a specialization of @Component, allowing for implementation classes to be autodetected through classpath scanning.




@Service
public class TreeService {
@Autowired
TreeRepository treeRepository;

public Person save(Person person) {
return treeRepository.save(person);
}
}


Change your Controller class as this:



@RestController
@RequestMapping("/api")
public class FamilityTreeController {

@Autowired
TreeService treeService;

@PostMapping("/addPerson")
public Person addPerson(@Valid @RequestBody Person person) {
return treeService.save( person);
}
}


Please make the package names lowercase and follow the naming convention:



Change this: Repository.TreeRepository to this: com.example.repository.TreeRepository and for others too: com.example.model.Person com.example.exception.ResourceNotFoundException







share|improve this answer












share|improve this answer



share|improve this answer










answered Jan 3 at 15:05









NikhilNikhil

389614




389614













  • org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.services.TreeService.TreeService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    – al_khalid
    Jan 3 at 15:13











  • i get the following exception when compiling

    – al_khalid
    Jan 3 at 15:13











  • com.example.services.TreeService.TreeService I hope you have created a package with the name com.example.services.TreeService and TressService java class in it.

    – Nikhil
    Jan 3 at 15:16













  • It is best if you use the naming convention for packages as lowercase. Uppercase is for class names.

    – Nikhil
    Jan 3 at 15:17






  • 1





    I recommend you follow this tutorial. It is old but really good for learning Spring Boot youtube.com/watch?v=msXL2oDexqw

    – Nikhil
    Jan 3 at 15:53



















  • org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.services.TreeService.TreeService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    – al_khalid
    Jan 3 at 15:13











  • i get the following exception when compiling

    – al_khalid
    Jan 3 at 15:13











  • com.example.services.TreeService.TreeService I hope you have created a package with the name com.example.services.TreeService and TressService java class in it.

    – Nikhil
    Jan 3 at 15:16













  • It is best if you use the naming convention for packages as lowercase. Uppercase is for class names.

    – Nikhil
    Jan 3 at 15:17






  • 1





    I recommend you follow this tutorial. It is old but really good for learning Spring Boot youtube.com/watch?v=msXL2oDexqw

    – Nikhil
    Jan 3 at 15:53

















org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.services.TreeService.TreeService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

– al_khalid
Jan 3 at 15:13





org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'familityTreeController': Unsatisfied dependency expressed through field 'treeService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.services.TreeService.TreeService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

– al_khalid
Jan 3 at 15:13













i get the following exception when compiling

– al_khalid
Jan 3 at 15:13





i get the following exception when compiling

– al_khalid
Jan 3 at 15:13













com.example.services.TreeService.TreeService I hope you have created a package with the name com.example.services.TreeService and TressService java class in it.

– Nikhil
Jan 3 at 15:16







com.example.services.TreeService.TreeService I hope you have created a package with the name com.example.services.TreeService and TressService java class in it.

– Nikhil
Jan 3 at 15:16















It is best if you use the naming convention for packages as lowercase. Uppercase is for class names.

– Nikhil
Jan 3 at 15:17





It is best if you use the naming convention for packages as lowercase. Uppercase is for class names.

– Nikhil
Jan 3 at 15:17




1




1





I recommend you follow this tutorial. It is old but really good for learning Spring Boot youtube.com/watch?v=msXL2oDexqw

– Nikhil
Jan 3 at 15:53





I recommend you follow this tutorial. It is old but really good for learning Spring Boot youtube.com/watch?v=msXL2oDexqw

– Nikhil
Jan 3 at 15:53


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54023019%2fjava-spring-restfull-api%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Monofisismo

Angular Downloading a file using contenturl with Basic Authentication

Olmecas