Я новичок в Spring и следую примеру на http://spring.io/guides/gs/consuming-rest. Я заметил, что они не отображали все элементы JSON с http://graph.facebook.com/pivotalsoftware, поэтому я хотел немного расширить пример. Для этого примера, я хотел бы добавить «любит» и «were_here_count», как и в Page.java:Spring RestTemplate пользовательское сопоставление
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Page {
private String name;
private String about;
private String phone;
private String website;
private int were_here_count;
private int likes;
public String getName() {return name;}
public String getAbout() {return about;}
public String getPhone() {return phone;}
public String getWebsite() {return website;}
public int getVisitCount() {return were_here_count;}
public int getLikes() {return likes;}
}
и сделать эти изменения в Application.java:
import org.springframework.web.client.RestTemplate;
public class Application {
public static void main(String args[]) {
RestTemplate restTemplate = new RestTemplate();
Page page = restTemplate.getForObject("http://graph.facebook.com/pivotalsoftware", Page.class);
System.out.println("Name: " + page.getName());
System.out.println("About: " + page.getAbout());
System.out.println("Phone: " + page.getPhone());
System.out.println("Website: " + page.getWebsite());
System.out.println("Visit count: " + page.getVisitCount());
System.out.println("Likes: " + page.getLikes());
}
}
Я думал, что отображение выполнялось по имени элемента, и это работало для «любит», но не для «was_here_count». Выход:
Name: Pivotal
About: Pivotal is enabling the creation of modern software applications that leverage big & fast data – on a single, cloud independent platform.
Phone: (650) 286-8012
Website: http://www.pivotal.io
Visit count: 0
Likes: 1175
were_here_count в настоящее время составляет 60. Я предполагаю, что конвертер по умолчанию не нравится подчеркивание в имени переменной. Поэтому я использовал перегруженную версию getForObject, обеспечивая свое собственное отображение, например, так:
package hello;
import java.util.HashMap;
import java.util.Map;
import org.springframework.web.client.RestTemplate;
public class Application {
public static void main(String args[]) {
RestTemplate restTemplate = new RestTemplate();
Map<String, String> variables = new HashMap<String, String>(3);
variables.put("name", "name");
variables.put("about", "about");
variables.put("phone", "phone");
variables.put("website", "website");
variables.put("were_here_count", "were_here_count");
variables.put("likes", "likes");
Page page = restTemplate.getForObject("http://graph.facebook.com/pivotalsoftware", Page.class, variables);
System.out.println("Name: " + page.getName());
System.out.println("About: " + page.getAbout());
System.out.println("Phone: " + page.getPhone());
System.out.println("Website: " + page.getWebsite());
System.out.println("Visit count: " + page.getVisitCount());
System.out.println("Likes: " + page.getLikes());
}
}
Но все безрезультатно. Я видел несколько примеров, касающихся пользовательских конвертеров JSON, но не очень хорошо их понимал - плюс, это гораздо более простой пример, не мог ли я сделать это с помощью простого преобразования строк в String-String имен переменных?
Кто-нибудь знает, как это сделать и хочет показать мне, как создать пользовательский конвертер и какие необходимые шаги? Спасибо! :)