用spring boot 做了兩個APi,兩個APi之間的呼叫使用了RestTemplate的postForObject方法,回傳型別是自定義的ApiResponse。
被呼叫的A api Controller
@Controller
public class TestController {
@RequestMapping(value = "invocationMethod", method = RequestMethod.POST)
public ApiResponse getContracts(@PathVariable Integer id) {
ResultModel model = new ResultModel();
TestObject object = new TestObject();
object.setFild1("fild1");
object.setFild2("fild2");
model.setId("1");
model.setName("testName");
model.setObject(object);
return ApiResponse.success(model);
}
}
回傳型別 ApiResponse
public class ApiResponse {
// return code 200:OK
private Integer statusCode;
// whole message
private String message;
// The component of data
private Object responseData;
private ApiResponse(ResultStatus status) {
this.statusCode = status.code();
this.message = status.reason();
}
public static ApiResponse success(Object responseData) {
ApiResponse response = new ApiResponse(ResultStatus.SUCCESS);
return response.setResponseData(responseData);
}
}
回傳結果ResultModel
public class ResultModel {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TestObject getObject() {
return object;
}
public void setObject(TestObject object) {
this.object = object;
}
private String name;
private TestObject object;
}
TestObject物件
public class TestObject {
private String fild1;
private String fild2;
public String getFild1() {
return fild1;
}
public void setFild1(String fild1) {
this.fild1 = fild1;
}
public String getFild2() {
return fild2;
}
public void setFild2(String fild2) {
this.fild2 = fild2;
}
}
B Api的 Model和A api的Model完全一樣。
B Api 調 A Api
public class TestService {
@Autowired
private RestTemplate restTemplate;
public ApiResponse callAapi() {
ApiResponse response =
restTemplate.postForObject("http://localhost:9000/invocationMethod", "",
ApiResponse.class);
return response;
}
}
當把ApiResponse的ResponseData轉成ResultModel的,出錯了
public ResultModel getResultModel(ApiResponse response) {
return (ResultModel) response.getResponseData();
}
報的錯是LinkedHashMap不能轉換成ResultModel。
想請問一下,A Api的response實際是一個json的字串,通過postForObject轉成了Bean的物體類,為什么response中的ResponseData不能轉成Bean,而是被轉成了linkedHashMap?
調查了很久,沒找到原因,希望壇子里的大神們,如有看到此貼,麻煩發表下看法,謝謝!!!!
uj5u.com熱心網友回復:
這個應該要去翻原始碼~uj5u.com熱心網友回復:
ParameterizedTypeReference<List<MyModelClass>> typeRef = new ParameterizedTypeReference<List<MyModelClass>>() {
};
ResponseEntity<List<MyModelClass>> responseEntity = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(mvm), typeRef);
List<MyModelClass> myModelClasses = responseEntity.getBody(); 多加個 ParameterizedTypeReference 指定型別
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/202661.html
標籤:Java EE
