Pre-check
- [x] I am sure that all the content I provide is in English.
Search before asking
- [x] I had searched in the issues and found no similar issues.
Apache Dubbo Component
Java SDK (apache/dubbo)
Dubbo Version
Dubbo Java 3.3.4, JDK 17, MacOS 15.4.1
Steps to reproduce this issue
2025-05-09T17:12:22.750+08:00 INFO 85971 --- [yyy-servicer-demo] [3:9898-thread-8] o.a.d.r.p.t.h.CompositeExceptionHandler : [DUBBO] Http request process error: status=400, dubbo version: 3.3.4, current host: 192.168.9.133
org.apache.dubbo.rpc.protocol.tri.rest.RestParameterException: Missing argument 'reqArgs' for method parameter of type [class com.xxx.yyy.api.demo.entity.nogeneric.DsRequest] at org.apache.dubbo.rpc.protocol.tri.rest.argument.NamedValueArgumentResolverSupport.resolve(NamedValueArgumentResolverSupport.java:54) ~[dubbo-3.3.4.jar:3.3.4] at org.apache.dubbo.rpc.protocol.tri.rest.argument.AbstractAnnotationBaseArgumentResolver.resolve(AbstractAnnotationBaseArgumentResolver.java:36) ~[dubbo-3.3.4.jar:3.3.4] at org.apache.dubbo.rpc.protocol.tri.rest.argument.CompositeArgumentResolver.resolve(CompositeArgumentResolver.java:69) ~[dubbo-3.3.4.jar:3.3.4] at org.apache.dubbo.rpc.protocol.tri.rest.RestHttpMessageCodec.decode(RestHttpMessageCodec.java:87) ~[dubbo-3.3.4.jar:3.3.4] at org.apache.dubbo.remoting.http12.message.HttpMessageDecoder.decode(HttpMessageDecoder.java:56) ~[dubbo-3.3.4.jar:3.3.4] at org.apache.dubbo.remoting.http12.message.DefaultListeningDecoder.decode(DefaultListeningDecoder.java:41) ~[dubbo-3.3.4.jar:3.3.4] at org.apache.dubbo.rpc.protocol.tri.h12.DefaultHttpMessageListener.onMessage(DefaultHttpMessageListener.java:39) ~[dubbo-3.3.4.jar:3.3.4] at org.apache.dubbo.rpc.protocol.tri.h12.AbstractServerTransportListener.doOnData(AbstractServerTransportListener.java:183) ~[dubbo-3.3.4.jar:3.3.4] at org.apache.dubbo.rpc.protocol.tri.h12.AbstractServerTransportListener.lambda$onData$1(AbstractServerTransportListener.java:168) ~[dubbo-3.3.4.jar:3.3.4] at org.apache.dubbo.common.threadpool.serial.SerializingExecutor.run(SerializingExecutor.java:111) ~[dubbo-3.3.4.jar:3.3.4] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] at org.apache.dubbo.common.threadlocal.InternalRunnable.run(InternalRunnable.java:39) ~[dubbo-3.3.4.jar:3.3.4] at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
dubbo config
dubbo: application: name: ${spring.application.name}-dubbo logger: slf4j serialize-check-status: DISABLE check-serializable: false qos-enable: false qos-port: -1 protocol: host: ~ triple: verbose: true servlet: enabled: true protocols: tri: name: tri port: ${server.port} dubbo: name: dubbo port: -1 provider: retries: 0 timeout: 50000 consumer: check: false timeout: 50000 registry: address: nacos://192.168.0.95:8848?namingPushEmptyProtection=true&namingLoadCacheAtStart=false metadata-report: address: nacos://192.168.0.95:8848?namingPushEmptyProtection=true&namingLoadCacheAtStart=false config-center: address: nacos://192.168.0.95:8848?namingPushEmptyProtection=true&namingLoadCacheAtStart=false scan: base-packages: com.dsmm.yyy.servicer.demo
/*
* @author xxx
* @date 2020/2/27
/
public interface NoGenericResource {
NoGenericRs queryPrice(NoGenericRq reqArgs);
DsResponse
/* * @author xxx * @date 2020/2/27 / @Slf4j @DubboService public class NoGenericResourceImpl implements NoGenericResource {
@Override
public NoGenericRs queryPrice(NoGenericRq reqArgs) {
return null;
}
@Override
public DsResponse<DemoData> queryPrice2(DsRequest<DemoData> reqArgs) {
return null;
}
@Override
public DsResponse<Long> queryPrice3(DsRequest<Long> reqArgs) {
String reqStr = JSONObject.toJSONString(reqArgs);
System.out.println("rq:" + reqStr);
DsResponse<Long> rs = new DsResponse<>();
rs.setData(reqArgs.getData());
rs.setCode(200);
rs.setMsg("OK");
return rs;
}
}
idea http
POST http://127.0.0.1:9898/com.xxx.yyy.api.demo.NoGenericResource/queryPrice3 Content-Type: application/json
{ "data": 123456 }
What you expected to happen
When you start dubbo.protocol.triple.servlet.enabled=true and use a http://127.0.0.1:9898/com.xxx.yyy.api.demo.NoGenericResource/queryPrice3 request, you may get an org.apache.dubbo.rpc.protocol.tri.rest.RestParameterException: Missing argument 'reqArgs' for method parameter of type [class com.xxx.yyy.api.demo.entity.nogeneric.DsRequest] exception. For example, out of 10 requests, 4 will have this exception and 6 will be successful. seems to have an empty inputStream for body, but I don't know why. Please help me look at it. Thank you!
Anything else
No response
Are you willing to submit a pull request to fix on your own?
- [ ] Yes I am willing to submit a pull request on my own!
Code of Conduct
- [x] I agree to follow this project's Code of Conduct
Comment From: AlbumenJ
@oxsean PTAL
Comment From: heliang666s
Hi @poazy , to help us further diagnose the missing parameter issue, could you please confirm the following: 1. Does your project have any custom Filters, Interceptors, or AOP logic that might read the HttpServletRequest body in advance (e.g., by calling getInputStream() or getReader())? 2. Have you introduced any third-party dependencies such as Spring Security, Actuator, or monitoring/trace libraries, which may automatically register global filters and read the request body? 3. If you have any relevant custom Filter/AOP code, could you please provide a code snippet or a brief description of its main functionality? This information will help us determine whether the request body is consumed before Dubbo tries to parse it, which could cause the parameter missing exception. Thank you for your cooperation!
Comment From: poazy
Hi @heliang666s
1.No, my project does not have any custom Filters, Interceptors, or AOP logic that reads the HttpServletRequest body in advance (e.g., by calling getInputStream() or getReader()). 2.In my project, spring-cloud-starter-alibaba-nacos-discovery:2023.0.3.2 includes spring-security-crypto and spring-cloud-starter. In the project, spring-cloud-starter-stream-rocketmq:2023.0.3.2 includes opentelemetry-sdk-trace. The project also includes spring-boot-starter-actuator. Do these count? There are no other dependencies introduced. 3.No, I do not have any custom Filter, Interceptor, or AOP code in the project that processes or reads the HttpServletRequest body.
Thanks!
Comment From: poazy
When adding the @RequestBody annotation to the method parameter, an error occurs: {"message": "Missing argument 'reqArgs' for method parameter of type [class com.xxx.yyy.api.demo.entity.nogeneric.DsRequest]", "status": "400"}.
However, if the @RequestBody annotation is not added, no error occurs, but the method cannot receive the request body parameters.
Thanks!
Comment From: oxsean
@poazy could you pls provide a demo?
Comment From: poazy
@oxsean
I created a Demo project using spring-cloud-alibaba: 2023.0.3.2 and dubbo: 3.3.4 to reproduce this occasional error. Thanks!
https://github.com/poazy/dubbo-rest-demo