notify event事件回调通知方法模板代码

notify event事件回调通知方法模板代码

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported  
//    @PostMapping("/event/notify")
//    @RequestMapping(value = "/event/notify", method = RequestMethod.POST)
//    @PostMapping(value = "/event/notify",
//            consumes = {"application/json", "application/x-www-form-urlencoded", "text/plain"})
//    @PostMapping(value = "/event/notify",
//            consumes = MediaType.ALL_VALUE)
//    public EventResponse handleEventNotification(@RequestBody Map<String, Object> eventData) {

1.引入jar

compile("commons-io:commons-io:2.11.0")

2.通用方法,支持json也支持form表单提交方式,使用两种数据格式提交,测试通过。

@PostMapping(value = "/event/notify")
public EventResponse handleEventNotification(HttpServletRequest request) {
    try {
        Map<String, Object> eventData;
        
        String contentType = request.getContentType();
        if (contentType != null && contentType.contains("application/json")) {
            // JSON 格式处理
            String body = IOUtils.toString(request.getInputStream());
            ObjectMapper objectMapper = new ObjectMapper();
            eventData = objectMapper.readValue(body, Map.class);
        } else {
            // 表单格式处理
            eventData = new HashMap<>();
            request.getParameterMap().forEach((key, values) -> {
                if (values.length > 0) {
                    eventData.put(key, values[0]);
                }
            });
            
            // 如果有 sign 验证,需要特殊处理
            eventData.put("sign", request.getParameter("sign"));
        }
        
        // 继续原有逻辑...
        log.info("handleEventNotification eventData=[{}]", eventData);
        
        // 验证签名逻辑
        String sign = SignUtils.signMd5(eventData, Config.getAppKey(), Config.getAppSecret());
        log.info("handleEventNotification sign=[{}]", sign);
        if (!sign.equals(eventData.get("sign"))) {
            return new EventResponse(null, false, 400, "Invalid sign");
        }

        // 提取 orderStatus 并处理...
        String orderStatus = (String) eventData.get("orderStatus");
        // ... 后续处理逻辑
        
    } catch (Exception e) {
        return new EventResponse(null, false, 500, "Error processing event: " + e.getMessage());
    }
}

 

posted on 2026-01-16 10:29  oktokeep  阅读(2)  评论(0)    收藏  举报