当向运行Jetty的RESful API发送JSON POST请求时,我正在解析请求中接收到的JSON数据,并尝试将其映射到构造函数类。当接收到的数据不在getter/setter的精确布局中时,问题就会出现。
Vehicle v = new Gson().fromJson(req.getReader(), Vehicle.class);
我希望输出能够正确解析,因为API应该读取每个键并将其映射到getter和setter,这样我就可以访问它了
v.getVehicle_id();
但是,当发送不在getter/setter的确切布局中的JSON数据时。它会导致一个错误,因为它希望第一个输入的值是带整数的“vehicle_id”,而有时它会得到一个不同的值,例如带字符串“black”的“color”。
有没有更好的方法在JSON进入时解析它?我必须使用Gson,因为它是为一个大学作业。
这是我的车
public class Vehicle {
public Vehicle() {
}
/*
* Maps the database into this class so they can be used in the getter/setter, they are private as other classes don't need access to them
* This is because they go through the getters/setters, which are public.
*/
private int vehicle_id;
private String make;
private String model;
private int year;
private int price;
private String license_number;
private String colour;
private int number_doors;
private String transmission;
private int mileage;
private String fuel_type;
private int engine_size;
private String body_style;
private String condition;
private String notes;
public Vehicle(int vehicle_id, String make, String model, int
year, int price, String license_number, String colour, int
number_doors, String transmission, int mileage, String fuel_type,
int engine_size, String body_style, String condition, String
notes) {
this.vehicle_id = vehicle_id;
this.make = make;
this.model = model;
this.year = year;
this.price = price;
this.license_number = license_number;
this.colour = colour;
this.number_doors = number_doors;
this.transmission = transmission;
this.mileage = mileage;
this.fuel_type = fuel_type;
this.engine_size = engine_size;
this.body_style = body_style;
this.condition = condition;
this.notes = notes;
}
/*
* Creates the getter and setters which map to the database so they can be used by the Controller to store and retrieve data when needed.
*/
public int getVehicle_id() {
return vehicle_id;
}
public void setVehicle_id(int vehicle_id) {
this.vehicle_id = vehicle_id;
}
public String getMake() {
return make;
}
public void setMake(String make) {
this.make = make;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getLicense_number() {
return license_number;
}
public void setLicense_number(String license_number) {
this.license_number = license_number;
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
public int getNumber_doors() {
return number_doors;
}
public void setNumber_doors(int number_doors) {
this.number_doors = number_doors;
}
public String getTransmission() {
return transmission;
}
public void setTransmission(String transmission) {
this.transmission = transmission;
}
public int getMileage() {
return mileage;
}
public void setMileage(int mileage) {
this.mileage = mileage;
}
public String getFuel_type() {
return fuel_type;
}
public void setFuel_type(String fuel_type) {
this.fuel_type = fuel_type;
}
public int getEngine_size() {
return engine_size;
}
public void setEngine_size(int engine_size) {
this.engine_size = engine_size;
}
public String getBody_style() {
return body_style;
}
public void setBody_style(String body_style) {
this.body_style = body_style;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
}
这是我的JSON数据
{"colour":"Black","license_number":"DA98 7BK","body_style":"Small","engine_size":"1","number_doors":"Black","transmission":"manual","year":"2009","price":"10000","make":"Ford","vehicle_id":"8","notes":"Old","fuel_type":"Petrol","condition":"Old","mileage":"20000","model":"Ka"}
这是我从服务器收到的错误
2019-03-28 12:51:41.703:warn:oejs.httpchannel:qtp1225358173-9:/vehicledb/api com.google.gson.jsonSyntaxException:java.lang.NumberFormatException:对于输入字符串:“黑色”
修复了它,我使用了一个hashmap,然后使用gson.toJson将其转换为Json。
我现在正在使用一个构造函数,将我的值添加到它中,然后将它转换为JSON。
我的JSON格式为 如何使用jackson JSON映射器将其映射到POJOs以避免400个坏请求。 我试过了 我的控制器 多谢了。
问题内容: 我有以下JSON表示盐请求的服务器响应: 我尝试使用以下POJO映射它: 现在每次我这样做: 该为空。如何使用Gson将JSON映射到POJO?我的变量顺序对Gson映射重要吗? 问题答案: 我的变量顺序对Gson映射重要吗? 不,不是这样。 如何使用Gson将JSON映射到POJO? 它是 区分大小写 和JSON字符串键应该是相同的POJO类使用的变量名。 您可以使用@Seriali
我有以下JSON来表示salt请求的服务器响应: 我尝试用以下POJO映射它: 每次我这样做: 为空。如何使用GSON将JSON映射到POJO?变量的顺序对Gson映射重要吗?
问题内容: 我有以下JSON响应 我为GSON请求创建了以下类。如何发出GSON请求并使用截击请求存储响应的值。GSON请求应该是什么样的? 问题答案: 只需按以下步骤创建一个类(取自Android Developer Docs ) 现在,在您的类文件(活动)中,只需按如下所示调用此类: 我们还需要创建两种方法- -收到来自的回复 -处理任何错误 如下: 和 我希望这会有意义。
问题内容: 我正在尝试解析相同的JSON,但是现在我对类进行了一些更改。 我的班级现在看起来像: 此代码引发异常, 可以理解,因为按照我上一个问题的解决方案,GSON希望将Enum对象实际创建为 但是,由于从语法上讲这是不可能的,因此推荐的解决方案和解决方法是什么? 问题答案: 从Gson的文档中: Gson为枚举提供了默认的序列化和反序列化…如果您想更改默认的表示形式,则可以通过GsonBuil
我试图向服务器发出POST请求,但我遇到了一个问题。服务器似乎收到了请求,但我仍然在控制台中看到一个错误,建议将主体从Object更改为JSON 错误:SyntaxError:JSON中位于JSON位置0处的意外标记A。在XMLHttpRequest处解析()。装载(http://localhost:4200/vendor.js:69142:51)text:“它是用id=:23保存的新用户”pro