Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringRESTTemplate自定义映射_Java_Html_Json_Spring_Rest - Fatal编程技术网

Java SpringRESTTemplate自定义映射

Java SpringRESTTemplate自定义映射,java,html,json,spring,rest,Java,Html,Json,Spring,Rest,我是Spring的新手,并在上一节课上学习了这个例子。 我注意到他们没有映射所有的JSON元素,所以我想稍微扩展一下这个示例。对于这个例子,我想在Page.java中添加“likes”和“wer\u here\u count”: import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) public class Page { pri

我是Spring的新手,并在上一节课上学习了这个例子。 我注意到他们没有映射所有的JSON元素,所以我想稍微扩展一下这个示例。对于这个例子,我想在Page.java中添加“likes”和“wer\u here\u count”:

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());
    }
}
我认为映射是通过元素名完成的,这对“likes”有效,但对“were\u here\u 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());
    }
}
包你好;
导入java.util.HashMap;
导入java.util.Map;
导入org.springframework.web.client.rest模板;
公共类应用程序{
公共静态void main(字符串参数[]){
RestTemplate RestTemplate=新RestTemplate();
映射变量=新的HashMap(3);
变量。put(“名称”、“名称”);
变量。放置(“关于”、“关于”);
变量。put(“phone”、“phone”);
变量。放置(“网站”、“网站”);
变量。put(“WARE_here_count”,“WARE_here_count”);
变量。put(“likes”、“likes”);
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(“网站:+page.getWebsite());
System.out.println(“访问次数:+page.getVisitCount());
System.out.println(“Likes:+page.getLikes());
}
}
但一切都无济于事。我在这里看到了一些关于自定义JSON转换器的示例,但没有很好地理解它们——另外,这是一个简单得多的示例,我能不能用变量名的简单字符串映射来完成这项工作


有谁知道如何做,并愿意告诉我如何建立一个自定义转换器和必要的步骤是什么?谢谢!:)

页面的setter是什么样子的?我可以用这个setter:

public void setWere_here_count(int were_here_count) {
    this.were_here_count = were_here_count;
}
尝试向
页面
类中添加一些,以帮助实现JSON的反序列化。您应该能够告诉Jackson(默认情况下,Jackson将在Spring中处理JSON的序列化/反序列化),响应JSON中的哪些属性映射到您的POJO属性:

public class Page {
    ...
    @JsonProperty("were_here_count") 
    private int wereHereCount;
    ...
}
如果您不确定返回的是什么属性,那么另一种选择是将JSON映射到
映射

Map<String,Object> map = restTemplate.getForObject("http://graph.facebook.com/pivotalsoftware", Map.class);
for (Map.Entry entry: response.entrySet()){
    // do stuff...
}
Map Map=restTemplate.getForObject(“http://graph.facebook.com/pivotalsoftware“,Map.class);
for(Map.Entry:response.entrySet()){
//做些事情。。。
}

有时候,当响应JSON复杂或不容易反序列化时,这是一种更容易实现自定义对象映射的方法。

真的很感谢,这种解决方案更简单、更方便。
Map<String,Object> map = restTemplate.getForObject("http://graph.facebook.com/pivotalsoftware", Map.class);
for (Map.Entry entry: response.entrySet()){
    // do stuff...
}