如何使用 Spring WebClient 反序列化通用响应

Kum*_*eya 2 java deserialization spring-webclient

我在反序列化响应期间遇到问题。假设我使用 webclient 来自第三方的响应。

Response : 
{
   "name":"FirstName",
   "type":"Steel",
   "Fee":{
      "id":"1234",
      "name":"FeeFirstName"
   },
   "address":"2nd Street"
}
Run Code Online (Sandbox Code Playgroud)

这就是我的 pojo 类的样子

public class Fee{} //generic OR empty class

public class Foo{
  private String name;
  private String type;
  private Fee fee;
  private String address;
}
Run Code Online (Sandbox Code Playgroud)

我的网络客户端获取响应代码:

@Autowired
private WebClient fooWebClient;

public Foo getFoo()
{
try{
     return fooWebClient.get()
        .uri(uriBuilder -> uriBuilder.path("/foo/fee").build("123"))
        .header(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON_VALUE)
        .accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .bodyToMono(Foo.class)
        .block();
    }catch(Exception e){throw new ApiClientException(e.getMessage());}

}
Run Code Online (Sandbox Code Playgroud)

上面的 webclient getFoo() 代码没有给我完整的响应,费用是空白的,说明“类没有字段”。其余的值都会正确响应。费用需要为空,因为任何其他对象也可以出现。

请让我知道如何反序列化整个响应。

lka*_*ris 5

您不需要该类Fee,您可以完全摆脱它并使用 Map 代替:

public class Foo {
  private String name;
  private String type;
  private Map<String, Object> fee;
  private String address;
}
Run Code Online (Sandbox Code Playgroud)