Java CS作业Jackson反序列化VehicleRequest未识别字段报错如何解决
问题原因
你的代码报错核心是客户端接收响应时用错了反序列化的类:
服务器端返回的是VehicleResponse类型的JSON字符串,但客户端sendRequest方法里调用的是VehicleRequest.fromJSON(in.readLine()),试图把包含request、milesOnVehicle等字段的响应JSON反序列化为只有year、make、model三个字段的VehicleRequest对象,JSON里的request字段在VehicleRequest类中不存在,所以Jackson抛出了无法识别字段的异常。
修复步骤
- 首先修改客户端
Client类的sendRequest方法,将返回值类型改为VehicleResponse,同时调用正确的反序列化方法:
// 原错误代码 // public VehicleRequest sendRequest() throws Exception { // out.println(VehicleRequest.toJSON(new VehicleRequest(2008,"Honda","Civic"))); // return VehicleRequest.fromJSON(in.readLine()); // } // 修改后代码 public VehicleResponse sendRequest() throws Exception { out.println(VehicleRequest.toJSON(new VehicleRequest(2008,"Honda","Civic"))); return VehicleResponse.fromJSON(in.readLine()); }
- 同步修改客户端
main方法里的输出逻辑,适配返回的VehicleResponse类型:
// 原错误代码 // System.out.println(client.sendRequest().toString()); // 修改后代码 VehicleResponse response = client.sendRequest(); System.out.println(response.toString()); // 如果需要打印请求信息也可以通过response.getRequest()获取: // System.out.println("对应的请求参数:" + response.getRequest().toString());
- 可选优化:你当前
VehicleResponse类的toString方法描述写错了,开头写的是"Vehicle request",且数组直接打印会输出地址值,建议调整成和实际内容匹配的表述,避免后续调试混淆:
// 需要先导入java.util.Arrays包 @Override public String toString() { return String.format( "Vehicle response:[行驶里程=%d, 价格=%d, 座位数=%d,车门数=%d, 选配选项=%s]", milesOnVehicle,price,numberOfSeats,numberOfDoors, Arrays.toString(options)); }
内容的提问来源于stack exchange,提问作者Tobi
相关产品推荐
相关产品推荐

