Dat Pham
Dat Pham

Reputation: 147

Spring RESTFul Client – RestTemplate

I'm using Resttemplate class to get all User object. But when i run Main in Client then occur error, please let me know how fix it ???

Exception in thread "main" org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not deserialize instance of edu.java.spring.service.user.model.User out of START_ARRAY token at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@7d70d1b1; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of edu.java.spring.service.user.model.User out of START_ARRAY token at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@7d70d1b1; line: 1, column: 1] at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:228) at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.read(MappingJackson2HttpMessageConverter.java:220) at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:95) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:549) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:502) at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:239) at edu.java.spring.service.client.RestClientTest.getUsers(RestClientTest.java:57) at edu.java.spring.service.client.RestClientTest.main(RestClientTest.java:40) Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of edu.java.spring.service.user.model.User out of START_ARRAY token at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@7d70d1b1; line: 1, column: 1]

Here file RestClientTest.java

public class RestClientTest {

    public static void main(String[] args) throws IOException{
        List<User> users = getUsers();
        for (int i = 0; i < users.size(); i++) {
            System.out.println("Rest Response" + loadUser(users.get(i).getUserName()));
        }

    }
    public static List<User> getUsers(){
        String uri = new String("http://localhost:8080/rest/user/list");
        RestTemplate rt = new RestTemplate();
        return (List<User>) rt.getForObject(uri,User.class);
    }

Here file UserRestServiceController.java

@Controller
public class UserRestServiceController {
    @Autowired
    public  UserDao userDao;
    @RequestMapping(value = "/rest/user/list", produces = MediaType.APPLICATION_JSON_VALUE,method = RequestMethod.GET)
    public @ResponseBody List<User> getUsers(){
        return userDao.listUsers();
    }

Upvotes: 0

Views: 855

Answers (1)

RSS
RSS

Reputation: 33

I think the rest method is sending you back the List<User> objects but you are trying to parse it using User.class in following code : rt.getForObject(uri,User.class);. Try something like rt.getForObject(uri,List.class);.

Upvotes: 3

Related Questions