spring-boot-starter-web枚举和反序列化失败

时间:2017-10-30 21:39:21

标签: java spring-boot enums gson spring-web

我想反序列化一个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?

0 个答案:

没有答案
相关问题