Reputation: 2243
I have a method in a Spring MVC controller as follows:
// Gets a Person via REST.
@RequestMapping(value="/person/{personId}", method=RequestMethod.GET)
public ModelAndView getPerson(@PathVariable("personId") String personId) {
logger.info(RestController.class.getName() + ".getPerson() method called.");
Person person = personService.get(Integer.parseInt(personId));
return new ModelAndView(view,"person", person);
}
The method is working correctly but in the code to process the JSON on the client, I get the following exception:
Unrecognized field "person" (class libraryApp.model.Person), not marked as ignorable (6 known properties: , "personId", "address", "telephone", "books", "name", "email"])
The code is below:
// Set request.
String url = ("http://localhost:8080/Library/rest/person/1");
HttpGetRequest httpGetRequest = new HttpGetRequest(url, "GET", "");
// Make request.
httpGetRequest.get();
// Get response.
if (httpGetRequest.getResponseCode() != 200) {
throw new RuntimeException("Get request failed: HTTP error code: " + httpGetRequest.getResponseCode());
}
else {
// Receive JSON from server and convert to Person.
ObjectMapper mapper = new ObjectMapper();
Person person = mapper.readValue(httpGetRequest.getResponse(), Person.class);
System.out.println("Person:");
System.out.println(person.toString());
if (! (person.getBooks().isEmpty())) {
System.out.println("Books:");
for (Book book : person.getBooks()) {
System.out.println(book.toString());
}
}
}
Person is a simple POJO as follows:
public class Person implements Serializable {
// Attributes.
private Integer personId;
private String name;
private String address;
private String telephone;
private String email;
private List<Book> books;
I am using ModelAndView constructor, ModelAndView(String viewName, String modelName, Object modelObject)
. So according to the JavaDoc I have to specify a modelName
but how can I deal with this on the client?
Now I am getting no response on the client from the following if I use a class called Messages in the following code:
ObjectMapper mapper = new ObjectMapper();
Object obj = mapper.readValue(httpGetRequest.getResponse(), Object.class);
if (obj instanceof Messages) {
Messages m = (Messages) obj;
for (String s : m.getMessages())
System.out.println("Here " + s);
}
Messages is a utility class:
public class Messages {
private List<String> messages;
public Messages() {
messages = new ArrayList<String>();
}
With the controller method now:
@RequestMapping(value="/person/{personId}", method=RequestMethod.GET)
@ResponseBody public String getPerson(@PathVariable("personId") String personId) {
logger.info(RestController.class.getName() + ".getPerson() method called.");
Person person = personService.get(Integer.parseInt(personId));
ObjectMapper mapper = new ObjectMapper();
try {
Messages m = new Messages();
m.addMessage("SDGSFGSDFGSDFASDG");
return mapper.writeValueAsString(m);
// return mapper.writeValueAsString(person);
}
catch (JsonProcessingException ex) {
return null;
}
}
Logging the client, I get:
Sending Get request: http://localhost:8080/Library/rest/person/1.
Receiving response code: 200. {messages=[SDGSFGSDFGSDFASDG]}
Upvotes: 1
Views: 1534
Reputation: 2774
If there is no re-direction from your GET call, try this:
@RequestMapping(value="/person/{personId}", method=RequestMethod.GET)
@ResponseBody
public String getPerson(@PathVariable("personId") String personId) {
logger.info(RestController.class.getName() + ".getPerson() method called.");
Person person = personService.get(Integer.parseInt(personId));
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(person);
}
Make sure you Messages
class is also a POJO
public class Messages implements Serializable{
private List<String> messages;
//setters and getters for messages
}
Upvotes: 1