diff --git a/dubbo-demo/dubbo-demo-interface/src/main/java/org/apache/dubbo/demo/RestDemoService.java b/dubbo-demo/dubbo-demo-interface/src/main/java/org/apache/dubbo/demo/RestDemoService.java index f12536bfd1..0405b739f2 100644 --- a/dubbo-demo/dubbo-demo-interface/src/main/java/org/apache/dubbo/demo/RestDemoService.java +++ b/dubbo-demo/dubbo-demo-interface/src/main/java/org/apache/dubbo/demo/RestDemoService.java @@ -65,7 +65,7 @@ public interface RestDemoService { Boolean testBody2(Boolean b); @POST - @Path("/testBody3") + @Path("/testBody4") @Consumes({MediaType.TEXT_PLAIN}) TestPO testBody2(TestPO b); diff --git a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/ResteasyContext.java b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/ResteasyContext.java index d1e6ec0fa4..91f2edfb43 100644 --- a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/ResteasyContext.java +++ b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/ResteasyContext.java @@ -169,10 +169,13 @@ public interface ResteasyContext { for (Map.Entry> entry : headers.entrySet()) { String key = entry.getKey(); - if (entry.getValue() == null) { + List value = entry.getValue(); + if (value == null || value.isEmpty()) { continue; } - response.addOutputHeaders(key, entry.getValue().toString()); + for (Object tmp : value) { + response.addOutputHeaders(key, tmp.toString()); + } } } diff --git a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyNettyHttpResponse.java b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyNettyHttpResponse.java index 826f84df70..92de82f8d9 100644 --- a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyNettyHttpResponse.java +++ b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/extension/resteasy/filter/ResteasyNettyHttpResponse.java @@ -42,7 +42,14 @@ public class ResteasyNettyHttpResponse implements HttpResponse { for (Map.Entry> headers : outputHeaders.entrySet()) { String key = headers.getKey(); List value = headers.getValue(); - multivaluedMap.add(key, value); + + if (value == null || value.isEmpty()) { + continue; + } + + for (String val : value) { + multivaluedMap.add(key, val); + } } } diff --git a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/message/codec/JsonCodec.java b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/message/codec/JsonCodec.java index c03ed001d4..49994f18b1 100644 --- a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/message/codec/JsonCodec.java +++ b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/message/codec/JsonCodec.java @@ -33,13 +33,12 @@ import java.util.Set; /** * body is json */ -@Activate("json") +@Activate(value = "json", order = 100) public class JsonCodec implements HttpMessageCodec { private static final Set unSupportClasses = new HashSet<>(); static { unSupportClasses.add(byte[].class); - unSupportClasses.add(String.class); } public static void addUnSupportClass(Class unSupportClass) { diff --git a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/message/codec/StringCodec.java b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/message/codec/StringCodec.java index 4f939ea7fb..1a543a2ad7 100644 --- a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/message/codec/StringCodec.java +++ b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/message/codec/StringCodec.java @@ -28,7 +28,7 @@ import java.nio.charset.StandardCharsets; /** * body is string */ -@Activate("string") +@Activate(value = "string", order = 200) public class StringCodec implements HttpMessageCodec { @Override diff --git a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/netty/NettyHttpResponse.java b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/netty/NettyHttpResponse.java index 72256f53e9..d29e194104 100644 --- a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/netty/NettyHttpResponse.java +++ b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/netty/NettyHttpResponse.java @@ -190,6 +190,10 @@ public class NettyHttpResponse implements HttpResponse { outputHeaders.put(name, values); } + if (values.contains(value)) { + return; + } + values.add(value); }