这是我的阿曼班:
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown=true)
public class Aman
{
public static class Title
{
private String title;
public String getTitle(){ return title; }
public String setTitle(String s){ return title = s; }
}
private int id;
private int year;
private int total;
public void id(int i){ id = i; }
public void year(int y){ year = y; }
public void total(int t){ total =t; }
}
这是映射值的Movie类:
import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import java.net.*;
public class Movie
{
public static void main(String[] args) throws MalformedURLException, URISyntaxException, IOException {
Aman a = new Aman();
ObjectMapper mapper = new ObjectMapper();
URL RT = new URL("http://api.rottentomatoes.com/api/public/v1.0/movies.json?apikey=gzscv4f8zqse75w94mmp37zz&q=Toy+Story+3&page_limit=1").toURI().toURL();
a = mapper.readValue(RT, Aman.class);
}
}
我一遍又一遍地得到同样的例外。
我做错了吗?
以下是一直存在的异常:
Exception:Exception in thread "main" org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "total" (Class Aman), not marked as ignorable
at [Source: http://api.rottentomatoes.com/api/public/v1.0/movies.json?apikey=gzscv4f8zqse75w94mmp37zz&q=Toy+Story+3&page_limit=1; line: 31, column: 11] (through reference chain: Aman["total"])
答案 0 :(得分:3)
在Aman
课程的顶部,添加以下注释 - @JsonIgnoreProperties(unknown=true)
。那,或者实际上将JSON中存在的所有属性映射为类中的属性。
@JsonIgnoreProperties(ignoreUnknown=true)
class Aman {
// properties
}
Jackson FasterXML Wiki上描述了管理非映射属性的其他一些选项。
根据您的评论,您映射JSON的数据类也没有任何属性。这不会起作用。我建议你阅读FasterXML上的5 Minute Jackson Tutorial,但是映射的一般要点是:
给出JSON文档:
{
"message" : "Hi, I am a JSON object",
"sender" : "Bob"
}
和Java对象:
@JsonIgnoreProperties(unknown=true)
class Post {
private String message;
}
您可以使用Jackson编写以下代码将JSON映射到对象:
final ObjectMapper mapper = new ObjectMapper();
final Post post = mapper.readValue(json, Post.class);
假设json
是包含所显示的JSON数据的字符串
Jackson会将JSON中的属性映射到Java对象中的属性。在显示的示例中,JSON中有一个名为sender
的附加属性。通常,如果Java对象上没有相同名称的相应属性,则库会抛出异常,但是使用@JsonIgnoreProperties(unknown=true)
注释会覆盖此行为,而是继续反序列化。
所以你需要做的是定义一个Aman
类,它具有与Rotten Tomatoes API发送给你的JSON相匹配的属性。
答案 1 :(得分:0)
您应该从远程接收数据的Aman
类没有字段total
,而您收到的JSON具有此字段。
您可以将其添加到课程中,也可以通过提供以下内容告诉Jackson忽略收到的未知事物:
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
在运行mapper.readValue()
之前。