omnip620 / node-zookeeper-dubbo

A middleware helps node to communicate dubbo by using its default protocol, which is registered in zookeeper
300 stars 80 forks source link

请教一下,node-zookeeper-dubbo模块如何向java后端插入一个对象? #72

Closed dpc761218914 closed 6 years ago

dpc761218914 commented 6 years ago
`java的代码
@Transactional
    public void insertUser(User user) {

        System.out.println("user" + user.toString());
        userDao.insertUser(user);
        // System.out.println(1 / 0);
    }
`

Node的代码:

const mydata="{ job: 'Teache11', salary: 100, name: 'Jacks2', id: 4 }";           
const data = Dubbo.IUserService.insertUser(mydata);   
 console.log(data);   

        const rdata = data.then( data => {    

              console.log('string test success');    

              console.log(data);   

              return data;})   

            .catch( err => {   

              console.log(err);    

            });   

        return rdata;    

这样插入数据是不成功的,不能插入数据吗?

omnip620 commented 6 years ago

不能,要转换成java对象的形式,类似于这种

const customerObj = {
  $class: 'com.xxx.XXXDTO',
  $: {
    a: 1,
    b: 'test',
    c: {$class: 'java.lang.Long', $: 123}
  }
};
dpc761218914 commented 6 years ago

使用的时候:


          $class: 'com.jzy.edu.exam.domain',
          $: {
            id: {$class: 'java.lang.Integer', $: 2222},
            name: {$class: 'java.lang.String', $: "teacher11"},
            salary: {$class: 'java.lang.Integer', $: 2222},
            job: {$class: 'java.lang.String', $: "teacher11"},
          }
        };

        const mydata1={
          id: {$class: 'java.lang.Integer', $: 2222},
          name: {$class: 'java.lang.String', $: "teacher11"},
          salary: {$class: 'java.lang.Integer', $: 2222},
          job: {$class: 'java.lang.String', $: "teacher11"},
        }

        const data = Dubbo.IUserService.insertUser(customerObj);`
dpc761218914 commented 6 years ago

这样传对象好像不对呢

dpc761218914 commented 6 years ago

java端插入函数是这样的:insertUser(User user)

dpc761218914 commented 6 years ago

请问不用传参的情况下,method要如何定义呢?? ` methodSignature: { insertUser: user => [ { $class: "com.jzy.edu.exam.domain.User", $: user } ], fin0dUser: id => [{ $class: "java.lang.Integer", $: id }], getUser: id => [{ $class: "java.lang.Integer", $: id }], findUser: id => [{ $class: "java.lang.Integer", $: id }], getJsonUser: i => [{ $class: "java.lang.Integer", $: i }], getUserList

  }`

其中java函数中getUserList是不用传参数的

omnip620 commented 6 years ago

需要知道User的定义

const customerObj = {
  $class: 'com.xxx.XXXDTO', // User 的定义 例如:com.dubbo.demo.User
  $: {
     id:  2222,
     name: "teacher11",
     salary: 2222,
     job: "teacher11",
  }
};
Dubbo.IUserService
  .insertUser(customerObj)
  .then(data => {
    console.log(data)
  })
  .catch(err => {
    console.error(data)
  })
dpc761218914 commented 6 years ago

嗯嗯,谢谢了,插入对象没问题了,请问在无参的情况下如何定义method呢

dpc761218914 commented 6 years ago

可以了,直接用空就可以了

harryhan1989 commented 5 years ago

项目需求nodejs连接dubbo接口,找到node-zookeeper-dubbo很不错,但是复杂java对象却很难开发。网上也没搜到这方面的工具,索性自己写了个,经过多次调试试错,实现了普通json自动转换为dubbo可识别的java序列化对象,可支持java实体类内嵌实体类及内嵌List这种转化,简单高效,现在实现的比较简单,就是个工具类,有兴趣的同学欢迎包装为nodejs通用插件或eggjs插件:https://github.com/harryhan1989/json-to-java

harryhan1989 commented 5 years ago

看这个吧,之前也找了很久都是要自己拼接太麻烦了