-1
我有一个类包含其他类的其他一些属性,当我尝试从JSON转换到我的类时,显示一个错误。将JSON映射到类不工作
这是我的课:
import org.jongo.marshall.jackson.oid.MongoObjectId;
import org.json.JSONObject;
import java.util.List;
public class BusinessTravelDTO {
@MongoObjectId
private String id;
private String travelerId;
private BusinessTravelStatus status;
List<FlightDTO> flights;
List<HotelDTO> hotels;
List<CarDTO> cars;
public BusinessTravelDTO() { }
public BusinessTravelDTO(JSONObject data) {
this.travelerId = data.getString("travelerId");
this.status = BusinessTravelStatus.valueOf(data.getString("status"));
this.flights = HandlerUtil.getInputFlights(data.getJSONArray("flights"));
this.hotels = HandlerUtil.getInputHotels(data.getJSONArray("hotels"));
this.cars = HandlerUtil.getInputCars(data.getJSONArray("cars"));
}
public JSONObject toJson() {
return new JSONObject()
.put("id", this.id)
.put("travelerId", this.travelerId)
.put("status", this.status)
.put("flights", this.flights)
.put("hotels", this.hotels)
.put("cars", this.cars);
}
而且这里是我尝试转换为等级:
public static JSONObject acceptBusinessTravel(JSONObject input) {
String btId = getStringField(input, "id");
MongoCollection businessTravels = getBTCollection();
// Here is the problem...
BusinessTravelDTO bt = businessTravels.findOne(new ObjectId(btId)).as(BusinessTravelDTO.class);
bt.setStatus(BusinessTravelStatus.Accepted);
businessTravels.save(bt);
return new JSONObject().put("message", "The business travel has been ACCEPTED by your manager. Check your email.");
}
这是我收到的错误:
"error": "org.jongo.marshall.MarshallingException: Unable to unmarshall result to class path.data.BusinessTravelDTO from content { \"_id\" : { \"$oid\" : \"59d6905411d58632fd5bd8a5\"} , \"travelerId\"
在jongo docs指定类应该有一个空的构造函数... http://jongo.org/#mapping我有2个构造函数,我也试过了与@JsonCreator,但没有成功... :(
你有一个想法,为什么它不转换?它可能是与BusinesTravelDTO中的字段相关的,例如List CarDTO for ex?
JSON文本似乎有一个带'$ oid'字段的'_id'字段,而您的'BusinessTravelDTO'有'String'类型的'id'字段。你是如何期望这项工作的? ---虽然我有点困惑,因为我看不到你在做编组的代码。向我们展示'acceptBusinessTravel()'方法有什么意义? – Andreas
http://idownvotedbecau.se/noexceptiondetails/ – Andreas
@Andreas也许你错过了@MongoObjectId,这个annotation允许你在类中使用mongo对象id,但是如果你不这样做,'_id'是无论如何创建的场景...: - | –