java如何将响应解码为列表?
我收到这样的回复:
[{"id":1,"someField":"someValue"}]
以下是我的请求:
private HttpRequest doRequest(String body, URI uri) {
return HttpRequest.newBuilder()
.POST(HttpRequest.BodyPublishers.ofString(body))
.uri(uri)
.headers(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
.build();
}
我试着这么做,但没有成功:
protected ClassToDecode createResponse(HttpResponse<HttpBodyCodec> response) {
return response.body().decodeAs(ClassOfResponse.class);
}
My ClassToDecode有我的响应类列表:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Builder
@EqualsAndHashCode
public class ClassToDecode {
private List<ClassResponse> responses;
}
还有我的ClassResponse和要解码的字段:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Builder
@EqualsAndHashCode
public class ClassResponse {
@JsonProperty("id")
private Integer id = null;
@JsonProperty("someField")
private String someField = null;
}
这样,字段中就不会充满响应。 我无法解码我收到的列表,我该怎么做
# 1 楼答案
以上这些答案是正确的。但是,我用这种方式解决了这个问题:
这只是解决问题的另一种方法
# 2 楼答案
类
ClassToDecode
无法工作的原因是,它试图在json对象中找到responses
键,如下所示:做你想做的事情最简单的方法是:
这应该是我们的工作,并帮助您解码
问候
# 3 楼答案
你试图做的事情并没有真正起作用,因为:
你有几个选择
你得到了马可的建议,这会把你的课程变成一个列表。(如果你想真正喜欢抽象列表,我认为马可的建议更好,因为你不必为一次性课程添加任何逻辑。)我认为这是一个很好的建议,如果你需要反序列化到特定的类
你只需要一个列表,而不是ClassToDecode。如果你班上没有什么特别的东西,这就足够了。但事实可能并非如此。当然,如果需要,您也可以稍后
new ClassToDecode(deserializedJsonList)
。如果你只是需要一个反序列化的对象,这可能是你最好的选择正如Marco所指出的,如果控制发送的JSON,就可以在名为responses的字段中创建列表。通过这种方式,objectmapper应该能够处理问题
可以使用自定义反序列化程序来反序列化列表。但正如我们所说,用大炮射杀麻雀