用Zuul操作请求体

时间:2016-10-20 11:00:54

标签: netflix-zuul

我们使用Zuul作为边缘服务器。我想编写一个过滤器,用一个具有该请求的第一个application / json部分的实体替换入站请求中的multipart / form-data。

例如,使用multiparts的请求:

[multipart/form-data]
[Part 1] << Application/JSON (name="info")
[Part 2] << Binary (name="file")

被翻译成:

[application/json]
[Contents of Part 1]

使用Zuul过滤器可以实现这一点,我应该使用什么类型的过滤器?

1 个答案:

答案 0 :(得分:0)

我最近不得不偷看身体以弄清楚如何路由传入的消息。下面的代码显示了如何从请求中提取主体并将其转换为JSON对象。这可能会让你开始。

public class ActivateServicePreFilter extends ZuulFilter {
@Override
public String filterType() {
    return PRE_TYPE;
}

@Override
public int filterOrder() {
    return 4;
}

@Override
public boolean shouldFilter() {

    HttpServletRequest request = RequestContext.getCurrentContext().getRequest();


    return "POST".equals(request.getMethod()) && request.getRequestURI().contains("uri-string");
}

@Override
public Object run() {

    HttpServletRequest request = RequestContext.getCurrentContext().getRequest();

    StringBuffer jb = new StringBuffer();
    String line = null;
    try {
        BufferedReader reader = request.getReader();
        while ((line = reader.readLine()) != null)
            jb.append(line);
    } catch (Exception e) { /*report an error*/ }

    try {
        JSONObject jsonObject = new JSONObject(jb.toString());
        String jsonField = jsonObject.getString("jsonFieldKey");

        System.out.println(jsonField);

    } catch (JSONException e) {
        // crash and burn

    }




    return null;
}