我有一种方法的资源:
@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/add")
public Response putThing(Thing thing) {
try {
//Do something with Thing object
return Response.status(HttpStatus.SC_OK).build();
} catch (Exception e) {
log.error("Request failed", e);
return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).build();
}
}
事情:
public class Thing {
private final String symbol;
private final String name;
public Stock(String symbol, String name) {
this.symbol = symbol;
this.name = name;
}
public String getSymbol() {
return this.symbol;
}
public String getName() {
return this.name;
}
}
当我发出如下PUT请求时:
PUT /rest/add HTTP/1.1
Host: localhost:8135
Content-Type: application/json
Cache-Control: no-cache
{"symbol":"some symbol","name":"some name"}
我得到以下回应:
找不到适合类型[简单类型,类Thing]的构造函数:无法从JSON对象实例化(缺少默认构造函数或创建者,或者可能需要添加/启用类型信息?)
为什么Jersey / Jackson不将JSON对象反序列化到POJO中?
您需要一个无参数的构造函数和setter或使用@JsonCreator
。最简单的方法就是添加带有setter的no-
arg。反序列化时,杰克逊需要二传手。对于序列化,只需要使用吸气剂即可。
编辑
要使其保持不变,可以@JsonCreator
在构造函数上使用。例如
@JsonCreator
public Thing(@JsonProperty("symbol") String symbol,
@JsonProperty("name") String name) {
this.symbol = symbol;
this.name = name;
}
查看更多杰克逊注释:@JsonCreator揭秘
问题内容: 尝试获取JSON请求并处理它时,出现以下错误: org.codehaus.jackson.map.JsonMappingException:未找到类型[简单类型,类com.myweb.ApplesDO]的合适构造函数:无法从JSON对象实例化(需要添加/启用类型信息吗?) 这是我尝试发送的JSON: 在Controller中,我具有以下方法签名: AllApplesDO是ApplesD
问题内容: 尝试获取JSON请求并处理它时,出现以下错误: org.codehaus.jackson.map.JsonMappingException:未找到类型[简单类型,类com.myweb.ApplesDO]的合适构造函数:无法从JSON对象实例化(需要添加/启用类型信息吗?) 这是我要发送的JSON: 在Controller中,我具有以下方法签名: AllApplesDO是ApplesDO
问题内容: 我尝试测试以下代码没有成功: 因为我已经手动覆盖了默认的构造函数,而不是它的子类。 我该如何解决这个问题? 问题答案: 使其静态。杰克逊无法反序列化内部阶级
我正在尝试使用Jersey作为框架实现一个小的REST API,原则上代码工作正常,但是当我尝试对哈希表进行“GET”时,我得到以下错误: 这是有问题的一行: 这就是我实现服务的方式: pom公司。xml(maven依赖项) 服务器端配置: 在客户端中注册杰克逊时出错: 新类别: 术语类: 有人能帮我退回地图吗?
问题内容: 我尝试测试以下代码没有成功: 这个问题不同于这个问题: 用Jackson解序列化JSON-为什么JsonMappingException“没有合适的构造函数”? 这个: [JsonMappingException:没有找到适合类型简单类型,类]的构造函数:无法从JSON对象实例化 这个: JsonMappingException:没有找到适合类型[简单类型,类]的构造函数:无法从JSO
下面是我收到错误的代码(在“new”之后的第二个“Killer”处)。 这给我带来了不少麻烦,因为我看不出为什么基于Killer的构造函数,这个声明应该有效。 这是杀手班: 我知道这可能有一个简单的解决方案,但到目前为止,我还没有看到。