Skip to content

Commit bf4f0c0

Browse files
authored
A couple of rest bugfix (#14822)
1 parent 7618e10 commit bf4f0c0

File tree

6 files changed

+21
-4
lines changed

6 files changed

+21
-4
lines changed

dubbo-plugin/dubbo-rest-jaxrs/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/jaxrs/HeaderParamArgumentResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ protected Object resolveCollectionValue(NamedValueMeta meta, HttpRequest request
4343

4444
@Override
4545
protected Object resolveMapValue(NamedValueMeta meta, HttpRequest request, HttpResponse response) {
46-
return request.headers();
46+
return request.headers().asMap();
4747
}
4848
}

dubbo-plugin/dubbo-rest-spring/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/spring/RequestHeaderArgumentResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ protected Object resolveCollectionValue(NamedValueMeta meta, HttpRequest request
4343

4444
@Override
4545
protected Object resolveMapValue(NamedValueMeta meta, HttpRequest request, HttpResponse response) {
46-
return request.headers();
46+
return request.headers().asMap();
4747
}
4848
}

dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/h12/HttpContextCallbackFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import org.apache.dubbo.rpc.RpcException;
3030
import org.apache.dubbo.rpc.protocol.tri.TripleConstants;
3131

32-
@Activate(group = CommonConstants.PROVIDER, order = 29000)
32+
@Activate(group = CommonConstants.PROVIDER, order = 10)
3333
public class HttpContextCallbackFilter implements Filter, BaseFilter.Listener {
3434

3535
@Override

dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/RestHttpMessageCodec.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.apache.dubbo.remoting.http12.message.HttpMessageEncoder;
2727
import org.apache.dubbo.remoting.http12.message.MediaType;
2828
import org.apache.dubbo.rpc.protocol.tri.rest.argument.ArgumentResolver;
29+
import org.apache.dubbo.rpc.protocol.tri.rest.argument.TypeConverter;
2930
import org.apache.dubbo.rpc.protocol.tri.rest.mapping.meta.ParameterMeta;
3031

3132
import java.io.ByteArrayInputStream;
@@ -34,6 +35,7 @@
3435
import java.io.InputStream;
3536
import java.io.OutputStream;
3637
import java.nio.charset.Charset;
38+
import java.util.Optional;
3739

3840
public final class RestHttpMessageCodec implements HttpMessageDecoder, HttpMessageEncoder {
3941

@@ -43,6 +45,7 @@ public final class RestHttpMessageCodec implements HttpMessageDecoder, HttpMessa
4345
private final HttpResponse response;
4446
private final ParameterMeta[] parameters;
4547
private final ArgumentResolver argumentResolver;
48+
private final TypeConverter typeConverter;
4649
private final HttpMessageEncoder messageEncoder;
4750
private final Charset charset;
4851

@@ -51,11 +54,13 @@ public RestHttpMessageCodec(
5154
HttpResponse response,
5255
ParameterMeta[] parameters,
5356
ArgumentResolver argumentResolver,
57+
TypeConverter typeConverter,
5458
HttpMessageEncoder messageEncoder) {
5559
this.request = request;
5660
this.response = response;
5761
this.parameters = parameters;
5862
this.argumentResolver = argumentResolver;
63+
this.typeConverter = typeConverter;
5964
this.messageEncoder = messageEncoder;
6065
charset = request.charsetOrDefault();
6166
}
@@ -106,6 +111,10 @@ private InputStream decodeInputStream(InputStream is) {
106111
public void encode(OutputStream os, Object data) throws EncodeException {
107112
if (data != null) {
108113
Class<?> type = data.getClass();
114+
if (type == Optional.class) {
115+
encode(os, ((Optional<?>) data).orElse(null));
116+
return;
117+
}
109118
try {
110119
if (type == byte[].class) {
111120
os.write((byte[]) data);
@@ -121,6 +130,9 @@ public void encode(OutputStream os, Object data) throws EncodeException {
121130
}
122131
return;
123132
}
133+
if (messageEncoder.mediaType().isPureText() && type != String.class) {
134+
data = typeConverter.convert(data, String.class);
135+
}
124136
} catch (HttpStatusException e) {
125137
throw e;
126138
} catch (Exception e) {

dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/mapping/RestRequestHandlerMapping.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
import org.apache.dubbo.rpc.protocol.tri.rest.RestHttpMessageCodec;
3737
import org.apache.dubbo.rpc.protocol.tri.rest.argument.ArgumentResolver;
3838
import org.apache.dubbo.rpc.protocol.tri.rest.argument.CompositeArgumentResolver;
39+
import org.apache.dubbo.rpc.protocol.tri.rest.argument.GeneralTypeConverter;
40+
import org.apache.dubbo.rpc.protocol.tri.rest.argument.TypeConverter;
3941
import org.apache.dubbo.rpc.protocol.tri.rest.mapping.condition.MethodsCondition;
4042
import org.apache.dubbo.rpc.protocol.tri.rest.mapping.meta.HandlerMeta;
4143
import org.apache.dubbo.rpc.protocol.tri.rest.util.RequestUtils;
@@ -51,13 +53,15 @@ public final class RestRequestHandlerMapping implements RequestHandlerMapping {
5153

5254
private final RequestMappingRegistry requestMappingRegistry;
5355
private final ArgumentResolver argumentResolver;
56+
private final TypeConverter typeConverter;
5457
private final ContentNegotiator contentNegotiator;
5558
private final CodecUtils codecUtils;
5659

5760
public RestRequestHandlerMapping(FrameworkModel frameworkModel) {
5861
ScopeBeanFactory beanFactory = frameworkModel.getBeanFactory();
5962
requestMappingRegistry = beanFactory.getOrRegisterBean(DefaultRequestMappingRegistry.class);
6063
argumentResolver = beanFactory.getOrRegisterBean(CompositeArgumentResolver.class);
64+
typeConverter = beanFactory.getOrRegisterBean(GeneralTypeConverter.class);
6165
contentNegotiator = beanFactory.getOrRegisterBean(ContentNegotiator.class);
6266
codecUtils = beanFactory.getOrRegisterBean(CodecUtils.class);
6367
}
@@ -98,6 +102,7 @@ public RequestHandler getRequestHandler(URL url, HttpRequest request, HttpRespon
98102
response,
99103
meta.getParameters(),
100104
argumentResolver,
105+
typeConverter,
101106
codecUtils.determineHttpMessageEncoder(url, responseMediaType));
102107

103108
if (HttpMethods.supportBody(method) && !RequestUtils.isFormOrMultiPart(request)) {

dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/basic/ParamArgumentResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ protected Object resolveMapValue(NamedValueMeta meta, HttpRequest request, HttpR
151151
case Param:
152152
return RequestUtils.getParametersMap(request);
153153
case Header:
154-
return request.headers();
154+
return request.headers().asMap();
155155
case Cookie:
156156
Collection<HttpCookie> cookies = request.cookies();
157157
if (cookies.isEmpty()) {

0 commit comments

Comments
 (0)