我正在开发一个基于微服务架构(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);
}
});
我收到此错误:
org.springframework.http.converter.HttpMessageNotReadableException: 缺少必需的请求正文:
如何避免从节点JS传递到JAX-RS服务的空对象?
谢谢你的帮助,答案 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);
}
});