我收到以下异常,不确定为什么...


  线程“主”中的异常
  org.springframework.web.client.RestClientException:无法提取
  响应:找不到适合响应类型的HttpMessageConverter
  [class com.avada.rest.UsersController $ Users]和内容类型
  [application / 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工作

最佳答案

原来是我的Users类(更具体地说是User中的List<User>类)中的一个问题。

我在可能认为导致异常的字段上用User更新了@JsonIgnore类,并且能够解决此问题。

因此,对于可能遇到此问题的其他人,请检查要尝试对其执行getForObject的对象,以确保所有内容都可以正确映射。

关于java - 找不到适合响应类型[类com.avada.rest.UsersController $ Users]的HttpMessageConverter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35230297/

10-11 16:25