Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使JsonIdentityInfo正常工作_Java_Spring_Spring Boot_Jackson - Fatal编程技术网

Java 无法使JsonIdentityInfo正常工作

Java 无法使JsonIdentityInfo正常工作,java,spring,spring-boot,jackson,Java,Spring,Spring Boot,Jackson,我有两个物体之间的关系。我有一个springcli与使用Jackson的restfulweb服务通信。我正在使用@JsonIdentityInfo注释,但它无法在这两个类之间创建关系。此外,我正在使用WebClient 第一个对象包含以下代码: import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.databind.annotation.JsonSerialize; @JsonSerialize(as=

我有两个物体之间的关系。我有一个springcli与使用Jackson的restfulweb服务通信。我正在使用@JsonIdentityInfo注释,但它无法在这两个类之间创建关系。此外,我正在使用WebClient

第一个对象包含以下代码:

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代码如下。(我也尝试过不使用交换策略,结果也一样):

ExchangeStategies ExchangeStategies=ExchangeStategies.builder()
.编解码器(配置器->
configurer.defaultCodecs().jackson2JsonDecoder(新的jackson2JsonDecoder(新的ObjectMapper(),MediaType.APPLICATION_JSON)))
.build();
字符串url=cliUtils.getBaseUrl();
WebClient WebClient=WebClient.builder().exchangeStrategies(exchangeStrategies.build();
UriComponentsBuilder=UriComponentsBuilder.newInstance().fromHttpUrl(url);
List units=webClient.get()
.uri(builder.build().toUri())
.header(HttpHeaders.CONTENT\u TYPE、MediaType.APPLICATION\u JSON\u值)
.retrieve()
.车身流量(发动机等级)
.LIST()
.block();
调用webClient代码时,我没有收到任何错误,但只有一个引擎有一个FuncUnit。 另一个引擎包含一个null作为单位

        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();