This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch 2.8.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/2.8.x by this push:
new d960aae46 [#4378]Fix getForObject not properly handle response type
(#4381)
d960aae46 is described below
commit d960aae46757f137e9c3176ec76e94626ea2e463
Author: liubao68 <[email protected]>
AuthorDate: Tue Jun 25 10:59:02 2024 +0800
[#4378]Fix getForObject not properly handle response type (#4381)
---
.../servicecomb/demo/controller/PersonAlias.java | 35 ++++++++++++++++++++++
.../microservices/springmvc/controller.yaml | 9 +++++-
.../demo/springmvc/client/TestControllerImpl.java | 12 ++++++++
.../demo/springmvc/server/ControllerImpl.java | 7 +++++
.../springmvc/reference/CseRequestCallback.java | 8 ++---
.../springmvc/reference/CseRestTemplate.java | 7 +++++
6 files changed, 73 insertions(+), 5 deletions(-)
diff --git
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/controller/PersonAlias.java
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/controller/PersonAlias.java
new file mode 100644
index 000000000..a1766eb29
--- /dev/null
+++
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/controller/PersonAlias.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.demo.controller;
+
+public class PersonAlias {
+ private String name;
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+}
diff --git
a/demo/demo-schema/src/main/resources/microservices/springmvc/controller.yaml
b/demo/demo-schema/src/main/resources/microservices/springmvc/controller.yaml
index be2feb0bf..d279bfec7 100644
---
a/demo/demo-schema/src/main/resources/microservices/springmvc/controller.yaml
+++
b/demo/demo-schema/src/main/resources/microservices/springmvc/controller.yaml
@@ -127,7 +127,14 @@ paths:
description: check the handler is effective
schema:
type: string
-
+ /testResponseModel:
+ get:
+ operationId: testResponseModel
+ responses:
+ "200":
+ description: testResponseModel
+ schema:
+ $ref: '#/definitions/Person'
definitions:
Person:
type: object
diff --git
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestControllerImpl.java
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestControllerImpl.java
index 37fd873f8..9b4880740 100644
---
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestControllerImpl.java
+++
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestControllerImpl.java
@@ -18,6 +18,8 @@ package org.apache.servicecomb.demo.springmvc.client;
import org.apache.servicecomb.demo.CategorizedTestCase;
import org.apache.servicecomb.demo.TestMgr;
+import org.apache.servicecomb.demo.controller.Person;
+import org.apache.servicecomb.demo.controller.PersonAlias;
import org.apache.servicecomb.provider.springmvc.reference.RestTemplateBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
@@ -32,6 +34,16 @@ public class TestControllerImpl implements
CategorizedTestCase {
public void testRestTransport() throws Exception {
testQueryParamSpecial();
+ testResponseModel();
+ }
+
+ private void testResponseModel() {
+ Person person = restTemplate.getForObject(SERVER +
"/springmvc/controller/testResponseModel", Person.class);
+ TestMgr.check("jack", person.getName());
+
+ PersonAlias personAlias = restTemplate.getForObject(SERVER +
"/springmvc/controller/testResponseModel",
+ PersonAlias.class);
+ TestMgr.check("jack", personAlias.getName());
}
private void testQueryParamSpecial() {
diff --git
a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ControllerImpl.java
b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ControllerImpl.java
index f3a65fb18..ff1c6514e 100644
---
a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ControllerImpl.java
+++
b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ControllerImpl.java
@@ -83,4 +83,11 @@ public class ControllerImpl {
public String sayHello1(@RequestParam("name") String name) {
return "Hello " + name + "," +
ContextUtils.getInvocationContext().getContext("k");
}
+
+ @RequestMapping(path = "/testResponseModel", method = RequestMethod.GET)
+ public Person testResponseModel() {
+ Person person = new Person();
+ person.setName("jack");
+ return person;
+ }
}
diff --git
a/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseRequestCallback.java
b/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseRequestCallback.java
index e452b0e4b..fd1e33cb9 100644
---
a/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseRequestCallback.java
+++
b/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseRequestCallback.java
@@ -26,13 +26,13 @@ import org.springframework.web.client.RequestCallback;
public class CseRequestCallback implements RequestCallback {
private final Object requestBody;
- private final RequestCallback orgCallback;
+ private final RequestCallback targetCallback;
private final Type responseType;
- public CseRequestCallback(Object requestBody, RequestCallback orgCallback,
Type responseType) {
+ public CseRequestCallback(Object requestBody, RequestCallback
targetCallback, Type responseType) {
this.requestBody = requestBody;
- this.orgCallback = orgCallback;
+ this.targetCallback = targetCallback;
this.responseType = responseType;
}
@@ -41,7 +41,7 @@ public class CseRequestCallback implements RequestCallback {
*/
@Override
public void doWithRequest(ClientHttpRequest request) throws IOException {
- orgCallback.doWithRequest(request);
+ targetCallback.doWithRequest(request);
CseClientHttpRequest req = (CseClientHttpRequest) request;
req.setResponseType(overrideResponseType());
diff --git
a/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseRestTemplate.java
b/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseRestTemplate.java
index c9b98d3aa..b4f3923b0 100644
---
a/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseRestTemplate.java
+++
b/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseRestTemplate.java
@@ -170,6 +170,13 @@ public class CseRestTemplate extends
AcceptableRestTemplate {
return cseCallback;
}
+ @Override
+ public <T> RequestCallback acceptHeaderRequestCallback(Class<T>
responseType) {
+ RequestCallback callback = super.acceptHeaderRequestCallback(responseType);
+ CseRequestCallback cseCallback = new CseRequestCallback(null, callback,
responseType);
+ return cseCallback;
+ }
+
@Override
public boolean isAcceptable(String uri) {
return uri.startsWith(RestConst.URI_PREFIX) ||
uri.startsWith(RestConst.URI_PREFIX_NEW);