我有类所有的类在我的Spring的网络流量应用程序,它有getter/setters没有get和设置前缀和setter返回这个。因此,我也定义了我的自定义杰克逊配置,它与我所有的控制器一起工作,成功地序列化反序列化。
我的杰克逊配置
@Configuration
public class JacksonObjectMapperConfiguration implements Jackson2ObjectMapperBuilderCustomizer {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder
.serializationInclusion(NON_NULL)
.failOnUnknownProperties(false)
.visibility(FIELD, ANY)
.modulesToInstall(new ParameterNamesModule(PROPERTIES));
}
}
我的请求类
@Accessors(chain = true, fluent = true)
@Getter
@Setter // from project Lombok
public class Test {
private String a;
private List<String> b;
}
现在如果我使用下面的webclient请求
public Mono<Void> postRequest(String a, List<String> b) {
Webclient webclient = Webclient.create();
return webClient.post()
.uri("some_url")
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(new Test().a(a).b(b))
.retrieve()
.bodyToMono(Void.class);
}
我得到一个如下的例外
org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'application/json' not supported for bodyType=<Classpath>
但是如果我通过下面这样的地图,它就会工作。
public Mono<Void> postRequest(String a, List<String> b) {
Webclient webclient = Webclient.create();
return webClient.post()
.uri(format("some_url")
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(new HashMap<String,Object>(){{put("a",a);put("b",b);}})
.retrieve()
.bodyToMono(Void.class);
}
我已经尝试删除@Access注释并自己创建getter setter,但仍然不起作用。
我认为这个异常是由于一些反序列化问题造成的。不过我不确定。Jackson在应用程序中与我的所有控制器配合良好。
我如何使第一个案例的工作,我可以提供一个类作为身体,而不是一个地图?
像下面这样创建WebClient解决了我的问题。
public WebClient webClient() {
WebClient.Builder builder = WebClient.builder();
builder.exchangeStrategies(EXCHANGE_STRATEGIES)
.defaultHeader("content-type", "application/json");
return builder.build();
}
public static final ObjectMapper GSON_LIKE_OM = new ObjectMapper()
.setSerializationInclusion(NON_NULL)
.setVisibility(FIELD, ANY)
.configure(FAIL_ON_UNKNOWN_PROPERTIES, false)
.registerModule(new ParameterNamesModule(PROPERTIES));
public static final ExchangeStrategies EXCHANGE_STRATEGIES = ExchangeStrategies
.builder()
.codecs(clientDefaultCodecsConfigurer -> {
clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(GSON_LIKE_OM, APPLICATION_JSON));
clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(GSON_LIKE_OM, APPLICATION_JSON));
}).build();
如果我试图转换成字符串,它工作得很好。下面的代码 我期待API的响应如下 }
我的源提供商向我发送。gz文件(zip文件)通过POST请求发送到我的服务器。 我试图实现。NET代码将拦截POST请求并解压缩文件以打开里面的文件。 我只是想截取POST请求并解压缩内容,这样做: 它返回415 Unsupport tedMediaType。 如何截获POST请求,这是一个ZIP文件,以及如何解压缩它以返回其中的文件? 谢谢你。 编辑:
当我执行一个web客户端请求(到一个外部api)并且响应是4xx或5xx代码时,我遇到了一个问题。建议处理该响应并使用自定义类检索响应 Web客户端配置是 处理过滤器.class MyExpcetion.class 但是我的客户回复总是给我一个默认格式 代替 怎么了?谢谢
问题内容: 我有一个非常简单的应用程序(没有Spring Boot)。我已经实现了和控制器方法。该方法效果很好。但是,POST正在抛出。复制步骤如下 ServiceController. java AppConfig.java AppInitializer.java 该代码在这里可用: 这将旋转嵌入式tomcat。 现在你可以卷曲以下内容 工作良好 但 引发415不支持的MediaType 问题答
Kafka可以配置为使用几种身份验证机制:明文用户名/密码、Kerberos或SSL。前2个使用SASL,其中需要JAAS配置文件。 对于纯文本auth方法,配置如下(取自文档): 如果可能的话,我想使用LDAP进行身份验证。我的问题是:如果我用一个实现LoginMoules的类替换,并将该类放在代理的类路径中,我是否可以以我希望的任何方式实现身份验证(即:LDAP)? 我不能以合理的方式使用Ke
我正在尝试从进行HTTP调用。该调用在post man中工作正常,下面是调用的版本, 但是我试图使用进行相同的调用。 但是,应用程序正在抛出异常, JAVAlang.IllegalStateException:block()/blockFirst()/blockLast()正在阻塞,这在thread reactor-http-nio-3中不受支持 这里出了什么问题?我对反应式编程非常陌生,谷歌对这