java接收回调通知实现方式

Posted Biubbbbbbbbiu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java接收回调通知实现方式相关的知识,希望对你有一定的参考价值。

演示POST方式发送通知信息,请求参数位于request中的body中
记录一次回调参数的对接,写起来感觉很简单,但是表达就感觉特别难
文章内容仅供参考,内容有误请及时指出纠正

回调通知示例
第三方回调通知参数,我们这边需要提供一个url,用来接收这个参数。
这次的回调参数位于request中的body中
提供的地址需要是外网地址

回调地址:http://url/test/saveNotify

controller层,进行接收回调参数
程序执行完后必须打印输出“success”(不包含引号)

package com...controller.test;

import com.service.jumi.JuMiAiService;
import com.web.BaseController;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.InputStreamReader;

@RestController
@RequestMapping(value = "/test", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class JuMiController extends BaseController{

    @Autowired
    private TestService testService;
    
    @RequestMapping(value = "saveNotify", method = RequestMethod.POST)
    @ApiOperation("回调参数测试")
    public String saveNotify(HttpServletRequest request){
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
            String line = null;
            StringBuilder sb = new StringBuilder();
            while((line = br.readLine())!=null){
                sb.append(line);
            }
            String reqBody = sb.toString();
            testService.saveNotify(reqBody);
        }catch (Exception e){
            e.printStackTrace();
        }
        return "success";
    }

}

service层,处理回调参数
reqBody便是第三方的回调通知参数,获取到这些参数之后便可进行其他操作处理

package com...service.test;

import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class TestService {

    private Logger logger = LoggerFactory.getLogger(TestService.class);
    @Autowired
    StringRedisTemplate redisTemplate;

    /**
     * 
     * @param reqBody
     */
    public void saveNotify(String reqBody){
        logger.info("reqBody="+reqBody);
        com.alibaba.fastjson.JSONObject resObj = JSONObject.parseObject(reqBody);
    }


}

以上是关于java接收回调通知实现方式的主要内容,如果未能解决你的问题,请参考以下文章

iOS 代理

基于Guava API实现异步通知和事件回调

通话期间未调用远程通知回调

给个Java接口回调的例子

VDS(虚拟磁盘服务)COM 接口通知 - 回调(接收器)仅在注销期间调用(不建议)

来自另一个片段的 Snackbar 回调