IllegalStateException:目标对象不能为空Spring Boot

时间:2017-03-13 11:56:25

标签: java node.js jax-rs

我正在开发一个基于微服务架构(JAX-RS)和nodeJS API的平台。

我在向数据库添加对象时遇到问题,因为它始终通过spring boot标记为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:   缺少必需的请求正文:

如何避免从节点JS传递到JAX-RS服务的空对象?

谢谢你的帮助,

2 个答案:

答案 0 :(得分:0)

您要发送actif作为查询参数

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

但是你的SpringMVC Endpoint希望在请求体中找到Actif对象

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

选项1:使用@RequestParameter("act") Actifs act并注册编辑器以从查询参数字符串中解析对象(请参阅this question)。

选项2:实际上将Actif json作为请求正文发送,例如通过向url + "/Add"执行POST请求而不是GET。您必须使用http.request来实现它。

此外,我建议使用@RequestBody(不使用required=false)。这可确保参数必须为非null,并且如果不是这样,则允许应用程序快速失败。

答案 1 :(得分: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);
    }
});