当前位置: 首页 > 知识库问答 >
问题:

错误“无法提取响应:没有找到适合响应类型的HttpMessageConverter...和内容类型[应用程序/json]”

有凯泽
2023-03-14

我正在向另一个服务发送GET请求,该服务以以下格式返回:

{
    "data": [
        {
            "email": "eskaferas@gmail.com",
            "firstName": "Seras",
            "lastName": "Meras"
        },
        {
            "email": "Soras@gmail.com",
            "firstName": "Oras",
            "lastName": "Moras"
        },
        {
            "email": "bzbzb@gmail.com",
            "firstName": "hello",
            "lastName": "bye"
        },
        {
            "email": "lrc@gmail.com",
            "firstName": "Seras",
            "lastName": "Meras"
        }
    ],
    "message": "Success"
}

我以这种方式使用响应实体:

@GetMapping("/todos/{toDoNoteId}/users")
    public ResponseEntity getNotesUsersTest(@PathVariable int toDoNoteId) {
        ToDoNote note = toDoNoteService.getToDoNoteById(toDoNoteId);
        if(note==null) {
            throw new ToDoNoteNotFoundException("Note with id "+ toDoNoteId + " not found");

        }
        RestTemplate restTemplate = new RestTemplate();
        final String uri = "http://friend:5000/users";

        try {
            ResponseEntity<ArrayResponsePojo> result = restTemplate.exchange(uri, HttpMethod.GET,null, new ParameterizedTypeReference<ArrayResponsePojo>() {}); 
            return result;

        }
        catch (HttpClientErrorException ex) {
            return ResponseEntity.status(ex.getRawStatusCode()).headers(ex.getResponseHeaders())
                    .body(ex.getResponseBodyAsString());

        }

    }

然而,当发送GET请求时,我得到了这个响应:类型定义错误:[简单类型,类com.tdl.model.ArrayResponsePojo];嵌套异常是com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造com.tdl.model.ArrayResponsePojo的实例(没有Creator,如默认构造,存在):无法从Object value(没有基于委托或属性的Creator)\n在[Source:(sun.net.www.protocol.http.HttpURLConnection$HttpInputStream);第2行,第5列]",

我不知道为什么我会得到这个解释,因为我确实有构造器。这是我的pojo类:

public class ArrayResponsePojo {
    private User[] data;
    private String message;

    public User[] getData() {
        return data;
    }
    public void setData(User[] data) {
        this.data = data;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }

    @JsonCreator
    public ArrayResponsePojo(User[] data, String message) {
        this.data = data;
        this.message = message;
    }

}

和我的用户类:

public class User {

     private String email;
     private String firstName;
     private String lastName;

     @JsonCreator
     public User(String email, String firstName, String lastName) {
        super();
        this.email = email;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getEmail() {
         return email;
     }
     public void setEmail(String email) {
         this.email = email;
     }
     public String getFirstName() {
         return firstName;
     }

     public void setFirstName(String firstName) {
        this.firstName = firstName;
     }
     public String getLastName() {
        return lastName;
     }
     public void setLastName(String lastName) {
         this.lastName = lastName;
     }

}

我尝试了没有和使用参数化类型参考。有人能帮忙吗?我不知道如何解决这个问题。

添加构造函数后编辑,我得到的是这个。:

"Could not extract response: no suitable HttpMessageConverter found for response type [class com.tdl.model.ArrayResponsePojo] and content type [application/json]".

这个问题的其他每个例子都处理不同于application/json的响应类型。

我还尝试将标头设置为application/json。

编辑2

如果我将响应实体类型设置为字符串,我就能够接收响应。但是,我需要接收对我的POJO类的响应

编辑 3 我发现调试器有一些警告,指出无法使用 JsonCreators。然后,我将JsonProperty添加到构造函数参数(或只是空构造函数),现在它不会返回错误,而是挂起30秒左右,然后才返回预期的结果。我在这里打开了另一个问题,因为它是一个不同的问题:RESTtemplate超级慢的GET请求

共有1个答案

郭均
2023-03-14

两个类都需要无参数构造函数。这就是错误消息告诉您的。

 类似资料: