公司有php和java开发,php开发了网关,要求用Hprose提供服务,网上教程太少,自己集成springboot和Hprose,还继承了spring和Hprose,主要思路是继承HproseServlet;然后注册方法,网关请求到服务端的是json字符串,服务端返回的也是json字符串,可能业务逻辑有所不同!底下附demo下载链接!
接口:
package com.example.demo.service;
/**
* HelloService接口
*
* @author Ding.Jie
*/
public interface HelloService {
/**
* sayHello方法
*
* @param request 请求参数数据(JSON字符串)
* @return 处理后的业务数据(JSON字符串)
*/
String sayHello(String request);
/**
* sayBye方法
*
* @param request 请求数据
* @return
*/
String sayBye(String request);
/**
* getUser方法
* @param request 请求数据
* @return
*/
String getUser(String request);
}
实现类:
package com.example.demo.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.example.demo.base.BaseService;
import com.example.demo.base.ResponeResult;
import com.example.demo.dao.UserDao;
import com.example.demo.model.User;
import com.example.demo.request.ResultData;
import com.example.demo.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Optional;
/**
* HelloService接口实现类
*
* @author Ding.Jie
*/
@Service
public class HelloServiceImpl extends BaseService implements HelloService {
@Autowired
private UserDao userDao;
/**
* sayHello方法
*
* @param request 请求参数数据(JSON字符串)
* @return 处理后的业务数据(JSON字符串)
*/
@Override
public String sayHello(String request) {
ResultData resultData = JSON.parseObject(request, new TypeReference<ResultData>() {
});
System.out.println(resultData);
// Optional<User> user = userDao.findById(Integer.valueOf(resultData.getData().getTemplateid()));
User user = new User();
user.setName("小丁");
user.setAge(18);
ResponeResult success = success(user);
return JSON.toJSONString(success);
}
@Override
public String sayBye(String request) {
ResponeResult error = error(700, "手机号错误");
// ResponeResult error = error();
return JSON.toJSONString(error);
}
@Override
public String getUser(String request) {
ResponeResult error = error();
return JSON.toJSONString(error);
}
}
HproseServlet:
package com.example.demo.servlet;
import com.example.demo.service.HelloService;
import hprose.common.HproseMethods;
import hprose.server.HproseServlet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import javax.servlet.annotation.WebServlet;
/**
* HproseServlet服务注册接口
* Created by Ding.Jie on 2018/10/23
*/
@WebServlet(urlPatterns = {"/api/v1.0.0/javatest/sayHello", "/api/v1.0.0/javatest/sayBye", "/api/v1.0.0/javatest/getUser"})
//标记为servlet,以便启动器扫描。
public class HproseServletDemo extends HproseServlet {
@Autowired
private HelloService helloService;
@Override
public void setGlobalMethods(HproseMethods methods) {
super.setGlobalMethods(methods);
// methods.addMethod("sayHello",helloService); 注册sayHello单个方法
methods.addInstanceMethods(helloService);//注册HelloService下所有的publice方法
}
}
扫描Servlet
@SpringBootApplication
@ServletComponentScan //启动器启动时,扫描本目录以及子目录带有的webservlet注解的
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
demo下载链接 :springboot_hprose_jpa_demo