bodyToMono 和 READ_UNKNOWN_ENUM_VALUES_AS_NULL 问题
Issue with bodyToMono and READ_UNKNOWN_ENUM_VALUES_AS_NULL
我有下面的代码
@Data
public class Test {
private String name;
private Type type;
public enum Type {
A("a"), B("b");
private final String value;
Type(String value) {
this.value = value;
}
@JsonValue
public String getValue() {
return value;
}
}
}
webClient
.get()
.uri(url)
.exchangeToMono(response -> response.bodyToMono(Test.class))
.map(test -> {
});
这里是 application.yml
中的配置
spring:
jackson:
deserialization:
READ_UNKNOWN_ENUM_VALUES_AS_NULL: true
这是 webClient 调用的测试响应
{"name": "test", "type": "c"}
我希望 test
是 {"name": "test"}
,因为 READ_UNKNOWN_ENUM_VALUES_AS_NULL
应该忽略未知的枚举值 "type": "c"
,但实际上我得到了 Mono.empty()
知道如何让 READ_UNKNOWN_ENUM_VALUES_AS_NULL
与 bodyToMono
一起工作吗
您需要配置 WebClient 编解码器以使用默认 Spring-managed Jackson ObjectMapper
。这是一个例子
WebClient webClient = WebClient.builder()
.codecs(configurer -> {
configurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(objectMapper, MediaType.APPLICATION_JSON));
configurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(objectMapper, MediaType.APPLICATION_JSON));
})
.build();
我有下面的代码
@Data
public class Test {
private String name;
private Type type;
public enum Type {
A("a"), B("b");
private final String value;
Type(String value) {
this.value = value;
}
@JsonValue
public String getValue() {
return value;
}
}
}
webClient
.get()
.uri(url)
.exchangeToMono(response -> response.bodyToMono(Test.class))
.map(test -> {
});
这里是 application.yml
中的配置spring:
jackson:
deserialization:
READ_UNKNOWN_ENUM_VALUES_AS_NULL: true
这是 webClient 调用的测试响应
{"name": "test", "type": "c"}
我希望 test
是 {"name": "test"}
,因为 READ_UNKNOWN_ENUM_VALUES_AS_NULL
应该忽略未知的枚举值 "type": "c"
,但实际上我得到了 Mono.empty()
知道如何让 READ_UNKNOWN_ENUM_VALUES_AS_NULL
与 bodyToMono
您需要配置 WebClient 编解码器以使用默认 Spring-managed Jackson ObjectMapper
。这是一个例子
WebClient webClient = WebClient.builder()
.codecs(configurer -> {
configurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(objectMapper, MediaType.APPLICATION_JSON));
configurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(objectMapper, MediaType.APPLICATION_JSON));
})
.build();