首页 > 解决方案 > Spring Framework HandleInterceptor 不解析 x-www-urlencoded 主体

问题描述

我有一个使用 x-www-urlencoded 作为主体的 API。在进入 API 之前,我已经实现了 HandlerInterceptor 来检查标头变量。我的 API 是不需要使用 HandlerInterceptor 拦截的 URL 之一。在 API 中,缺少 x-www-urlencoded 主体。我的代码有什么问题吗?

这是我的代码:

服务拦截器.java

public class ServiceInterceptor implements HandlerInterceptor {
    static Gson gson = new Gson();

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    String authorization = request.getHeader("Authorization");
    String key = request.getHeader("Key");
    String timestamp = request.getHeader("Timestamp");
    String signature = request.getHeader("Signature");
    String apiMethod = request.getMethod();
    String jsonIn = IOUtils.toString(request.getReader());
    String url = request.getRequestURI().replace(request.getContextPath(), "");

    if (url.equals("/get-token")) {
        return true;
    } else {
        model.mdlErrorSchema mdlAPIStatus = AuthorizationAdapter.CheckAuthorization(authorization, key, timestamp, signature, response, jsonIn, apiMethod, url);

        if (mdlAPIStatus.error_code.equals("ERR-00-000")) {
        return true; // continue processing
        } else {
        response.getWriter().write(gson.toJson(mdlAPIStatus));
        response.setContentType("text/json");
        response.setCharacterEncoding("UTF-8");
        response.setStatus(400);
        return false;
        }
    }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    // TODO Auto-generated method stub

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    // TODO Auto-generated method stub

    }
}

这是我的 API 代码

@RequestMapping(value = "/get-token", method = RequestMethod.POST, consumes = "application/x-www-form-urlencoded")
    public @ResponseBody model.mdlAPIObjectResult GetToken(@RequestHeader("Authorization") String authorization, @RequestHeader("Content-Type") String contentType, @RequestParam(value = "grant_type", defaultValue = "") String grantType, HttpServletResponse response) {

    if (!grantType.equals("client_credentials")) {
    mdlAPIResult.error_schema = ErrorAdapter.GetErrorSchema(ErrorStatus.ERR_99_003);
    response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
    return mdlAPIResult;
    } else {
        response.setStatus(HttpServletResponse.SC_OK);
    }
}

标签: javaspringspring-mvcrequest-mapping

解决方案


推荐阅读