我们使用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过滤器可以实现这一点,我应该使用什么类型的过滤器?
答案 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;
}