【发布时间】:2020-10-16 02:17:36
【问题描述】:
我有两个对象之间的关系。我有一个 Spring CLI 与使用 Jackson 的 RESTful Web 服务进行通信。我正在使用 @JsonIdentityInfo 注释,但它无法在两个类之间创建关系。另外我正在使用 WebClient
第一个 Object 包含以下代码:
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@JsonSerialize(as= FuncUnit.class)
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "fu_id", scope=FuncUnit.class)
@Setter @Getter
public class FuncUnit {
@JsonProperty(value = "description")
private String description;
@Id @JsonProperty(value = "fu_id", required = true)
private Long fu_id;
// standard constructors
public FuncUnit (long fuId)
{
fu_id = fuId;
}
public FuncUnit() {}
}
第二个对象是:
@JsonSerialize(as=Engine.class)
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Engine.class)
@Setter @Getter
public class Engine {
@JsonProperty(value = "id", required = true)
private Long id;
@JsonProperty(value = "func_unit")
private FuncUnit func_unit;
public Engine() {}
}
现在我收到的json如下:
[
{
"id": 111,
"functional_unit": {
"description": "",
"fu_id": 11,
},
},
{
"id": 112,
"functional_unit": 11,
}
]
而我写的webClient代码如下。 (我也试过不使用 ExchangeStrategies,结果是一样的):
ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder()
.codecs(configurer ->
configurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(new ObjectMapper(), MediaType.APPLICATION_JSON)))
.build();
String url = cliUtils.getBaseUrl();
WebClient webClient = WebClient.builder().exchangeStrategies(exchangeStrategies).build();
UriComponentsBuilder builder = UriComponentsBuilder.newInstance().fromHttpUrl(url);
List<Engine> units = webClient.get()
.uri(builder.build().toUri())
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.retrieve()
.bodyToFlux(Engine.class)
.collectList()
.block();
调用 webClient 代码时,我没有收到任何错误,但只有一个引擎具有 FuncUnit。 另一个引擎包含一个 null 作为 FuncUnit。
【问题讨论】:
标签: java spring spring-boot jackson