IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

Début angularjs - springboot- spring data/rest


Sujet :

AngularJS

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut Début angularjs - springboot- spring data/rest
    Bonjour,

    Je débute un petit projet de dev avec angularjs - springboot- spring data/rest.

    Avant tout, c'est tout nouveau pour moi angularjs .

    Je rencontre un petit problème lors de la persistance d'un objet.

    J'ai un objet Customer, RefStatus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    package fr.stockmanagement;
     
    import java.util.List;
     
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToMany;
    import javax.persistence.OrderBy;
    import javax.persistence.Table;
     
    @Entity
    @Table(name="CUSTOMER")
    public class Customer {
     
    	@Id
    	@GeneratedValue(strategy = GenerationType.AUTO)
    	@Column(name="CUSTOMER_ID")
    	private int customerId;
     
    	@Column(name="NAME")
    	private String name;
     
    	@Column(name="PHONE_NUMBER")
    	private String phoneNumber;
     
    	@Column(name="POSTAL_ADDRESS")
    	private String postalAddress;
     
    	@Column(name="CITY")
    	private String city;
     
    	@Column(name="COUNTRY")
    	private String country;
     
    	@Column(name="EMAIL")
    	private String email;
     
    	@OneToMany(mappedBy="customer")
    	@OrderBy("name ASC")
    	private List<Contact> contacts;
     
    	@ManyToOne
    	@JoinColumn(name = "STATUS_ID")
    	private RefStatus status;
     
    	public int getCustomerId() {
    		return customerId;
    	}
     
    	public void setCustomerId(int customerId) {
    		this.customerId = customerId;
    	}
     
    	public String getName() {
    		return name;
    	}
     
    	public void setName(String name) {
    		this.name = name;
    	}
     
    	public String getPhoneNumber() {
    		return phoneNumber;
    	}
     
    	public void setPhoneNumber(String phoneNumber) {
    		this.phoneNumber = phoneNumber;
    	}
     
    	public String getPostalAddress() {
    		return postalAddress;
    	}
     
    	public void setPostalAddress(String postalAddress) {
    		this.postalAddress = postalAddress;
    	}
     
    	public String getCity() {
    		return city;
    	}
     
    	public void setCity(String city) {
    		this.city = city;
    	}
     
    	public String getCountry() {
    		return country;
    	}
     
    	public void setCountry(String country) {
    		this.country = country;
    	}
     
    	public String getEmail() {
    		return email;
    	}
     
    	public void setEmail(String email) {
    		this.email = email;
    	}
     
    	public List<Contact> getContacts() {
    		return contacts;
    	}
     
    	public void setContacts(List<Contact> contacts) {
    		this.contacts = contacts;
    	}
     
    	public RefStatus getStatus() {
    		return status;
    	}
     
    	public void setStatus(RefStatus status) {
    		this.status = status;
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    package fr.stockmanagement;
     
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
     
    @Entity
    @Table(name="REF_STATUS")
    public class RefStatus {
     
    	@Id
    	@Column(name="STATUS_ID")
    	private int statusId;
     
    	@Column(name="CODE")
    	private String code;
     
    	@Column(name="DESCRIPTION")
    	private String description;
     
    	@Column(name="ACTIVE")
    	private Boolean active;
     
     
    	public int getStatusId() {
    		return statusId;
    	}
     
    	public void setStatusId(int statusId) {
    		this.statusId = statusId;
    	}
     
    	public String getCode() {
    		return code;
    	}
     
    	public void setCode(String code) {
    		this.code = code;
    	}
     
    	public String getDescription() {
    		return description;
    	}
     
    	public void setDescription(String description) {
    		this.description = description;
    	}
     
    	public Boolean getActive() {
    		return active;
    	}
     
    	public void setActive(Boolean active) {
    		this.active = active;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @RepositoryRestResource(collectionResourceRel = "refstatus", path = "refstatus")
    public interface RefStatusRepository extends CrudRepository<RefStatus, Integer> {
      @Query("SELECT c FROM RefStatus c")
      List<RefStatus> findAll();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    app.js
     
    $scope.addCustomer = function addCustomer() {
    		if($scope.name==""){
    			alert("Error");
    		}
    		else{
             	 $http.post(urlBase + '/customers', {
     
                 name: $scope.name,
                 status : $scope.statusId
             }).
    		  success(function(data, status, headers) {
    	  alert("Customer added");
                 var newTaskUri = headers()["location"];
             	    });
    	}
    	};
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <div ng-controller="taskManagerController">
    	<div id="add-task-panel" class="fadein fadeout addpanel panel">
    		<div class="panel-body">
    			<div class="task" >
    				<table class="add-task">
    					<tr>
    						<td>Customer Name:</td>
    						<td><input type="text" ng-model="name"/></td>
    					</tr>
     
    					<tr>
    						<td>Status:</td>
    						<td>
     
     
                        <select ng-model="statusId" ng-options="status.code for status in items.refstatus">
    								<option value="">-- Select --</option>						
    						     	</select>
     
    						</td>
    					</tr>
    					<tr>
    						<td><br/><button ng-click="addCustomer()" class="btn-panel-big">Ajouter client 3</button></td>
    					</tr>
    				</table>								
    			</div>
    		</div>
    		</div>
     
    </div>


    J'obtiens ça à l'enregistrement.



    2015-01-02 23:17:53.033 ERROR 11108 --- [p-nio-8-exec-10] s.d.r.w.AbstractRepositoryRestController : Could not read JSON: (was java.lang.NullPointerException) (through reference chain: fr.stockmanagem
    ent.Customer["status"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: fr.stockmanagement.Customer["status"])

    org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: (was java.lang.NullPointerException) (through reference chain: fr.stockmanagement.Customer["status"]); nested e
    xception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: fr.stockmanagement.Customer["status"])
    at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:228)
    at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readInternal(MappingJackson2HttpMessageConverter.java:212)
    at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:159)
    at org.springframework.data.rest.webmvc.config.PersistentEntityResourceHandlerMethodArgumentResolver.resolveArgument(PersistentEntityResourceHandlerMethodArgumentResolver.java:100)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:79)
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:157)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:124)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1720)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1679)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
    Caused by: com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: fr.stockmanagement.Customer["status"])
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:232)
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:197)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1420)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:244)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2993)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2158)
    at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:225)
    ... 39 common frames omitted
    Caused by: java.lang.NullPointerException: null
    at java.net.URI$Parser.parse(Unknown Source)
    at java.net.URI.<init>(Unknown Source)
    at java.net.URI.create(Unknown Source)
    at org.springframework.data.rest.webmvc.json.PersistentEntityJackson2Module$UriStringDeserializer.deserialize(PersistentEntityJackson2Module.java:359)
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:525)
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:99)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:242)
    ... 43 common frames omitted


    Savez-vous comment résoudre ce problème ?

    En gros, j'ai une entité qui contient une clé étrangère. et j'aimerai l'enregistrer.

    merci !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    finalement, j'ai trouvé solution en créant un controller en java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    	 @RequestMapping(value="/create/{name}/{status}",method = RequestMethod.POST,headers="Accept=application/json")
    	 public Customer create(
    			 @PathVariable String name,
    			 @PathVariable String status){
    		 Customer customer = new Customer();
    		 customer.setName(name);
    		 System.out.println("ici");
    		RefStatus refStatus = refStatusRepository.findByCode(status);
    		customer.setStatus(refStatus);
     
    		return this.customerRepository.save(customer);
    	 }
    ça marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/07/2013, 11h56
  2. [Spring data JPA] - Persister des objets managed et detached
    Par DevForFun dans le forum Persistance des données
    Réponses: 1
    Dernier message: 15/06/2013, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo