我正在使用CXF REST服务来连接两个应用程序。我在POST请求中将对象列表传递给其他应用程序。我意识到如果列表大小超过30,000,则另一方只收到29998个列表元素。我只想确认这是否属实,所以我开始深入研究CXF日志代码。 LoggingOutInterceptor类记录默认情况下限制为102400字节的有效负载,因此我可以覆盖它并在发送端查看有效负载。
但是LoggingInInterceptor没有在接收端记录有效负载,因此我无法比较有效负载以查看两者是否相同或者是否截断了接收的负载。
是否有更好的方法来记录接收方请求正文中发送的数据。 欢迎任何建议!
答案 0 :(得分:0)
我发现在启动tomcat之前,检查是在连接器配置的代码中进行的。 HTTP没有这种限制检查,只有POST请求的最大大小限制。
private final Tomcat tomcat = new Tomcat();
Connector connector = tomcat.getConnector();
connector.setMaxParameterCount(30000);
我的帖子请求共有3个参数,如下所示。现在,由于最大参数为30000,因此只有第2个参数和第3个参数中的29998才通过导线传输。
为解决此问题,我将API更改为接受JSON而不是表单参数。 JSON对象是单个参数,因此不违反最大参数数。这就是我的新旧API的外观
旧API:
@POST
@Path("/create")
public void create(@FormParam("id") long id, @FormParam("date") LocalDate date, @FormParam("oldPkeys") List<Long> oldPkeys, @FormParam("newPkeys") List<Long> newPkeys);
新的一个:
@POST
@Path("/createElements")
@Consumes(APPLICATION_JSON)
public void createElements(@QueryParam("id") long id, @QueryParam("date") LocalDate date, MyJSONObject pKeys);
MyJSONObject是自定义对象,其中包含oldPkeys和new Pkeys