2017-03-13 63 views
0

我正在開發一個基於微服務體系結構(JAX-RS)和nodeJS API的平臺。IllegalStateException:目標對象不能爲空Spring Boot

我在添加對象到數據庫時遇到問題,因爲它通常在spring引導時標記爲null。

*這是我的REST控制器代碼(JAX-RS):

@RequestMapping(value="/Add") 
    public Actifs AjouterActifs(@RequestBody Actifs act){ 

     return Actif.saveT(act); 
    } 

*這裏代碼節點API添加對象 「Actifs」:

app.post("/act/add",function (req,res) { 

     var addActif = JSON.stringify(req.body); 
     console.log("params: "+addActif); 

     try { 
      http.get(url+"/Add",+addActif, function (response) { //problem is here "addActif is null" 
       var dataJson =''; 
       response.on('data',function(data){ 
        dataJson += data; 
       }); 
       response.on('end',function(){ 
        try 
        { 
         var addAct = JSON.parse(dataJson); 
        } 
        catch(err) { 
         console.log('erreur de retourner l\'actif -->', +err); 
        } 
        res.json(addAct); 
       }); 
      }); 
     } 
     catch(e) { 
      console.log("erreur d'ajouter les info d'actif -->", +e); 
     } 
    }); 

*郵差: enter image description here

我收到此錯誤:

org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing:

如何避免從節點JS傳遞給JAX-RS服務的空對象?

謝謝你對我的幫助,

回答

0

我通過改變這樣的

app.post("/act/add",function (req,res) { 

     var addActif = JSON.parse(req.body); //parse object 
     console.log("params: "+addActif); 

     try { 
      http.get(url+"/Add",addActif, function (response) { // delete '+' 
       var dataJson =''; 
       response.on('data',function(data){ 
        dataJson += data; 
       }); 
       response.on('end',function(){ 
        try 
        { 
         var addAct = JSON.parse(dataJson); 
        } 
        catch(err) { 
         console.log('erreur de retourner l\'actif -->', +err); 
        } 
       res.json(addAct); 
      }); 
     }); 
    } 
    catch(e) { 
     console.log("erreur d'ajouter les info d'actif -->", +e); 
    } 
}); 
0

您發送actif添加作爲查詢參數

http.get(url+"/Add?act="+addActif, function (response) { 
    ... 
} 

但是你用SpringMVC端點期望找到ACTIF對象請求體

@RequestMapping(value="/Add") 
public Actifs AjouterActifs(@RequestBody(required=false) Actifs act) { 
    ... 
} 

選項1:使用@RequestParameter("act") Actifs act並註冊一個編輯器來解析對象f rom查詢參數字符串(請參閱this question)。

選項2:實際上發送Actif json作爲請求主體,例如,通過執行POST請求到url + "/Add"而不是GET。你將不得不使用http.request來實現。

此外,我會建議使用@RequestBody(沒有required=false)。這確保參數必須非空,並且如果不是這種情況,可以讓應用程序快速失敗。

+0

代碼謝謝您的答覆先生解決了這個問題,我試圖改變代碼,您有: 'Http.get(URL +「/添加」, + addActif,function(response)'AND'public actifs(@RequestBody Actif act)'但是當我刪除了'@RequestBody(required = false)'我有這個問題 - >「HttpMessageNotReadableException:所需的請求正文丟失」,謝謝 – emile01

+0

您必須選擇一個大綱選項,請注意,該異常準確地描述了您的問題:沒有請求主體,可以從nodejs發送請求主體或從查詢參數中分析預期的對象 – Pyranja

+0

我正在嘗試將接收到的對象從nodejs的url發送到Web服務JAX-RS。 但我仍然是對象爲null。我把代碼的最後更新。 – emile01

相關問題