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()); } }
浙公网安备 33010602011771号