You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java CS作业Jackson反序列化VehicleRequest未识别字段报错如何解决

问题原因

你的代码报错核心是客户端接收响应时用错了反序列化的类:
服务器端返回的是VehicleResponse类型的JSON字符串,但客户端sendRequest方法里调用的是VehicleRequest.fromJSON(in.readLine()),试图把包含request、milesOnVehicle等字段的响应JSON反序列化为只有year、make、model三个字段的VehicleRequest对象,JSON里的request字段在VehicleRequest类中不存在,所以Jackson抛出了无法识别字段的异常。

修复步骤

  1. 首先修改客户端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());
}
  1. 同步修改客户端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());
  1. 可选优化:你当前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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:06:03