我正在使用Jackson来将json数组反序列化为某些对象。这是我的课:
public class OfferContainer extends ActiveRecordBase{
public Offer offer;
public OfferContainer(){}
public OfferContainer(Database db) {
super(db);
}
@Override
public String toString()
{
return this.getID() + offer.toString();
}
public String getDescription() {
return offer.description;
}
public String getBusinessName() {
return offer.business.name;
}
public class Offer
{
public Category category;
public String description;
public String discount;
public Date expiration;
public Date published;
public String rescinded_at;
public String title;
public String hook;
public Date valid_from;
public Date valid_to;
public String id;
public Business business;
public Location location;
public String image_270x155;
public Offer() {
}
@Override
public String toString()
{
return String.format(
"[Offer: category=%1$s, description=%2$s, discount=%3$s, expiration=%4$s, published=%5$s, rescinded_at=%6$s, title=%7$s, valid_from=%8$s, valid_to=%9$s, id=%10$s, business=%11$s, location=%12$s]",
category, description, discount, expiration, published, rescinded_at, title, valid_from, valid_to, id,
business, location);
}
}
public enum Category
{
Salon, Spa, Restaurant, Other
}
// public class Category {
// public String category;
//
// public String toString() {
// return String.format("[Category: category=%1$s]", category);
// }
// }
public class Business
{
public String name;
public String phone;
public Address address;
public Business(){}
@Override
public String toString()
{
return String.format(
"[Business: name=%1$s, phone=%2$s, address=%3$s]",
name, phone, address);
}
}
public class Address
{
public String address_1;
public String address_2;
public String city;
public String cross_streets;
public String state;
public String zip;
public Address() {
}
@Override
public String toString()
{
return String.format(
"[Address: address_1=%1$s, address_2=%2$s, city=%3$s, cross_streets=%4$s, state=%5$s, zip=%6$s]",
address_1, address_2, city, cross_streets, state, zip);
}
}
public class Location {
public double latitude;
public double longitude;
public Location() {
}
public String toString() {
return String.format("[Location: longitude=%1$s, latitude=%2$s]", longitude, latitude);
}
}
}
错误:
W/System.err(26911): org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class org.me.pojos.OfferContainer$Business]: can not instantiate from JSON object (need to add/enable type information?)
W/System.err(26911): at [Source: java.io.StringReader@405fec40; line: 1, column: 382] (through reference chain: org.me.pojos.OfferContainer["offer"]->org.me.pojos.Offer["business"])
W/System.err(26911): at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObjectUsingNonDefault(BeanDeserializer.java:740)
W/System.err(26911): at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:683)
W/System.err(26911): at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
W/System.err(26911): at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
W/System.err(26911): at org.codehaus.jackson.map.deser.SettableBeanProperty$FieldProperty.deserializeAndSet(SettableBeanProperty.java:579)
W/System.err(26911): at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:635)
W/System.err(26911): at org.codehaus.jackson.map.deser.SettableBeanProperty$InnerClassProperty.deserializeAndSet(SettableBeanProperty.java:780)
W/System.err(26911): at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
W/System.err(26911): at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
W/System.err(26911): at org.codehaus.jackson.map.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:104)
W/System.err(26911): at org.codehaus.jackson.map.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:18)
W/System.err(26911): at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2723)
W/System.err(26911): at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1854)
W/System.err(26911): at org.me.OffersUpdater.updateOffersIfNeeded(OffersUpdater.java:107)
W/System.err(26911): at com.activities.Main$UpdateOffersTask.doInBackground(Main.java:265)
W/System.err(26911): at com.activities.Main$UpdateOffersTask.doInBackground(Main.java:239)
W/System.err(26911): at android.os.AsyncTask$2.call(AsyncTask.java:185)
W/System.err(26911): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
W/System.err(26911): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
W/System.err(26911): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
W/System.err(26911): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
W/System.err(26911): at java.lang.Thread.run(Thread.java:1019)
我一直在使用GSON,但由于性能问题需要放弃它。当我切换到Jackson时,我只是向所有类添加了默认构造函数,这可能是不必要的,因为没有定义其他构造函数…
编辑: 哦,JSON看起来像这样:
[ { "offer" : { "business" : { "address" : { "address_1" : "340 9th Avenue",
"address_2" : null,
"city" : "New York",
"cross_streets" : null,
"state" : "NY",
"zip" : "10001"
},
"name" : "Blarney Stone",
"phone" : "2125024656"
},
"category" : "Restaurant",
"claim_link" : "http://m.thinknear.com/offers/BLARNEY__1323954754?app_id=kz4hjo&latitude=40.75042&longitude=-73.99633",
"description" : "$1 off all drinks This discount was authorized by Toni Rossi. ",
"discount" : null,
"distance" : 161.40291744228713,
"draws" : [ "American" ],
"expiration" : "2011-12-15T21:59:59Z",
"hook" : "$1 Off Drinks",
"id" : "BLARNEY__1323954754",
"image_270x155" : "https://s3.amazonaws.com/default_images/restaurant_stock_255x170.jpg",
"location" : { "latitude" : "40.750444",
"longitude" : "-73.99824579999999"
},
"mobile_claim_link" : "http://m.thinknear.com/offers/BLARNEY__1323954754?app_id=kz4hjo&latitude=40.75042&longitude=-73.99633",
"published" : "2011-12-15T13:12:37Z",
"rescinded_at" : null,
"title" : "$1 Off All Drinks",
"valid_from" : "2011-12-15T13:12:34Z",
"valid_to" : "2011-12-15T21:29:59Z"
} },
{ "offer" : { "business" : { "address" : { "address_1" : "252 W 31st St",
"address_2" : null,
"city" : "New York",
"cross_streets" : null,
"state" : "NY",
"zip" : "10019"
},
"name" : "Hush Spa for Men",
"phone" : "2127570508"
},
"category" : "Spa",
"claim_link" : "http://m.thinknear.com/offers/HUSH_SPA_1323962075?app_id=kz4hjo&latitude=40.75042&longitude=-73.99633",
"description" : "Use this offer now to enjoy this great Spa at a 30% discount. Applies to all services except massages. This discount was authorized by Andy Paningua. ",
"discount" : "30",
"distance" : 185.37847063528784,
"draws" : [ "Body Work",
"Facial",
"Hair Removal"
],
"expiration" : "2011-12-16T02:59:59Z",
"hook" : "30% OFF",
"id" : "HUSH_SPA_1323962075",
"image_270x155" : "https://s3.amazonaws.com/ThinkNearMobileImages/hush_255x170.jpg",
"location" : { "latitude" : "40.7499612",
"longitude" : "-73.9942143"
},
"mobile_claim_link" : "http://m.thinknear.com/offers/HUSH_SPA_1323962075?app_id=kz4hjo&latitude=40.75042&longitude=-73.99633",
"published" : "2011-12-15T15:14:36Z",
"rescinded_at" : null,
"title" : "30% off at Hush Spa for Men",
"valid_from" : "2011-12-15T15:14:35Z",
"valid_to" : "2011-12-16T02:29:59Z"
} },
{ "offer" : { "business" : { "address" : { "address_1" : "481 8th Ave",
"address_2" : "Ste 740 ",
"city" : "New York",
"cross_streets" : "34th & 35th (New Yorker Hotel)",
"state" : "NY",
"zip" : "10001"
},
"name" : "Fusion Spa",
"phone" : "+18325329272"
},
"category" : "Spa",
"claim_link" : "http://m.thinknear.com/offers/FUSION_S_1323979416?app_id=kz4hjo&latitude=40.75042&longitude=-73.99633",
"description" : "Use this offer now to enjoy this great Spa at a 20% discount. New customers only. Not valid with other offers. By appointment only. Call ahead for appointment. This discount was authorized by Tiffany Albert. ",
"discount" : "20",
"distance" : 350.0873566571568,
"draws" : [ "Facial" ],
"expiration" : "2011-12-16T01:59:59Z",
"hook" : "20% OFF",
"id" : "FUSION_S_1323979416",
"image_270x155" : "https://s3.amazonaws.com/ThinkNearMobileImages/Fusion%2BSpa+1.jpg",
"location" : { "latitude" : "40.7526135",
"longitude" : "-73.99334859999999"
},
"mobile_claim_link" : "http://m.thinknear.com/offers/FUSION_S_1323979416?app_id=kz4hjo&latitude=40.75042&longitude=-73.99633",
"published" : "2011-12-15T20:03:38Z",
"rescinded_at" : null,
"title" : "20% off at Fusion Spa",
"valid_from" : "2011-12-15T20:03:36Z",
"valid_to" : "2011-12-16T01:29:59Z"
} }
]
我没有与Jackson一起工作,但我想问题是Business类是成员类而不是静态的。
杰克逊需要做的是
new OfferContainer.Business()
由于它是成员类,因此无法执行此操作。尝试将类设为静态。
public static class Business{
....
}
问题内容: 只有最后一部分(我的意思是我仅对此有问题) 当我编译它时,我没有合适的构造函数错误。为什么是这样??顺便说一下,Spirtokouto类的目的是要增加一个计数值(权重)。我可以将一个班级扩展到> 1个班级吗? 问题答案: Box类有两个构造函数:,但它们都不带四个参数,而您要用四个参数来调用它,因此请更改此参数: 对此: 调用必须首先在构造函数中进行。 我可以将一个班级扩展到 > 1个
我有一个Employee实体类,它有许多列。我想从这个类中获取一些列,因此我使用了DTO。我创建了一个新的BaseEmployee类,并在EmployeeRepository中编写了查询。但当我尝试运行应用程序时,我会遇到这样的错误:“类中没有合适的构造函数错误”。 我的dto类: Jpa仓库: 错误:
问题内容: 我是Java的新手,正在尝试为Minecraft制作一个mod,但我不知道如何解决此错误: 这是我的代码: 这是怎么回事,我正在尝试使字符串“ Username”重定向到另一个类。 问题答案: Java编译器告诉您不能构造对象,因为您对构造函数的调用与任何已知的构造函数都不匹配。 具体来说,编译器发现了两个构造函数: 但您致电给: 都不匹配。
从javase api 8开始,是不推荐的。因此,动态生成是首选的导出对象方式,如下所示: null 我的问题是,当出现在JavaE8 api中时,为什么编译器会出错?
我正在运行一个应用程序,可以在选择或捕捉它们后查看多个图像。当我运行应用程序时,ImageView部分似乎有问题,它说: