【问题标题】:no suitable HttpMessageConverter found for response type [class com.avada.rest.UsersController$Users]没有找到适合响应类型的 HttpMessageConverter [class com.avada.rest.UsersController$Users]
【发布时间】:2016-05-15 19:02:03
【问题描述】:

我收到以下异常,不知道为什么...

线程“main”中的异常 org.springframework.web.client.RestClientException:无法提取 响应:没有找到适合响应类型的 HttpMessageConverter [class com.avada.rest.UsersController$Users] 和内容类型 [应用程序/json;charset=UTF-8] 在 org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:109) 在 org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:576) 在 org.springframework.web.client.RestTemplate.execute(RestTemplate.java:529) 在 org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:236) 在 com.avada.rest.UsersTest.main(UsersTest.java:18)

这是我的 RestController:

@RestController
@RequestMapping("/users")
public class UsersController {

    @RequestMapping(method = RequestMethod.GET)
    public Users getUsers() {
        Users users = new Users();
        users.setUsers(ConstantsHome.userprofileMgr.getUsers(null));
        return users;
    }

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public User getUser(@PathVariable String id) {
        return ConstantsHome.userprofileMgr.getUserByUserId(id, true, true);
    }

    public static class Users {
        private List<User> users = new ArrayList<>();

        public List<User> getUsers() {
            return users;
        }

        public void setUsers(List<User> users) {
            this.users = users;
        }
    }
}

这是我的测试课:

public class UsersTest {
    private static RestTemplate template = new RestTemplate();

    public static void main (String[] args) throws Exception {
        // Get all users
        String uri = "http://localhost:8080/IR360/rest/users";
        UsersController.Users users = template.getForObject(uri, UsersController.Users.class);
        System.out.println("Looping through users...");
        for (User user : users.getUsers()) {
            System.out.println("Name=" + user.getName());
        }

        // Get 1 user
        uri = "http://localhost:8080/IR360/rest/users/admin";
        User user = template.getForObject(uri, User.class);
        System.out.println("Name for single user=" + user.getName());
    }
}

如果我注释掉“获取所有用户”的测试代码,我可以获得单个用户没有问题。

我在这段代码中做错了什么?

附: - 我可以通过浏览器拨打getUsers() 并且json 恢复正常,所以我知道getUsers() 正在工作......只是无法让RestTemplate 工作

【问题讨论】:

  • 在构建过程中将MappingJackson2HttpMessageConverter 的实例添加到RestTemplate 的转换器列表中
  • 我的RestTemplate 中存在以下所有转换器: 0 = {ByteArrayHttpMessageConverter@1366} 1 = {StringHttpMessageConverter@1367} 2 = {ResourceHttpMessageConverter@1368} 3 = {SourceHttpMessageConverter@1369} 4 = {AllEncompassingFormHttpMessageConverter@1370} 5 = {Jaxb2RootElementHttpMessageConverter@1371} 6 = {MappingJackson2HttpMessageConverter@1372}
  • 你能发布你的Users 课程吗
  • @Jaiwo99 - 我一直在研究,看起来我的User 课程确实是问题所在 - 这是一个大怪物。有没有办法让杰克逊对它的序列化/反序列化更加宽容?我想我也可以将 User 类修改为 Jackson 可以处理的可靠 POJO
  • 是的,当然,你可以......像@JsonIgnore 之类的......

标签: java spring spring-restcontroller


【解决方案1】:

原来是我的Users 类(更具体地说是List&lt;User&gt; 中的User 类)中的一个问题。

我在我认为可能导致异常的字段上使用@JsonIgnore 更新了User 类,并且我能够通过这个问题。

因此,对于可能遇到此问题的其他人,请检查您尝试执行 getForObject 的对象,以确保一切都可以正常映射。

【讨论】:

    猜你喜欢
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2016-03-15
    • 2017-10-31
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    相关资源
    最近更新 更多