我想反序列化一个Object但是json数据是一个字符串,我的对象的元素不是字符串而是枚举(字符串)。
我的对象(想要反序列化):
public enum ResponseStatus {
SUCCESS, ERROR, WARNING, NO_ACCESS
}
public class SessionResponse extends OperationResponse {
@ApiModelProperty(required = true, value = "")
private SessionItem item;
public SessionResponse() {
super();
}
public SessionItem getItem() {
return item;
}
public void setItem(SessionItem item) {
this.item = item;
}
}
public class OperationResponse {
@ApiModelProperty(required = true)
private ResponseStatus operationStatus;
private String operationMessage;
public ResponseStatus getOperationStatus() {
return operationStatus;
}
public void setOperationStatus(ResponseStatus operationStatus) {
this.operationStatus = operationStatus;
}
public String getOperationMessage() {
return operationMessage;
}
public void setOperationMessage(String operationMessage) {
this.operationMessage = operationMessage;
}
}
我使用这个网络客户端:
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.add("Content-Type", "application/json");
HttpEntity<Login> request = new HttpEntity<>(new Login("demo", "demo"), headers);
ResponseEntity<String> response = new TestRestTemplate().postForEntity("http://localhost:" + port + "/session", request, String.class);
System.out.println(response.getBody());
控制台:
{
"operationStatus" : "SUCCESS",
"operationMessage" : "Login Success",
"item" : {
"token" : "eyJhbGciOiJIUzI",
"userId" : "demo",
"firstName" : "Zinédine",
"lastName" : "Zidane",
"email" : "zzidane@mail.com",
"roles" : [ ]
}
}
但如果我使用
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.add("Content-Type", "application/json");
HttpEntity<Login> request = new HttpEntity<>(new Login("demo", "demo"), headers);
ResponseEntity<SessionResponse> response = new TestRestTemplate().postForEntity("http://localhost:" + port + "/session", request, SessionResponse.class);
System.out.println(response.getBody());
迹:
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.xxx.xxx.model.session.SessionResponse]
编辑1
如果我刚刚添加gson反序列化器,是否正常
Gson gson = new Gson();
SessionResponse s = gson.fromJson(response.getBody(), SessionResponse.class);
System.out.println(s.getItem().getLastName());
是否可以直接在TestRestTemplate()中使用gson。postForEntity?