当前位置: 首页 > 知识库问答 >
问题:

在spring Boot中发出web客户端post请求时处理多个DTO

龙佐
2023-03-14

我们的身体结构与此非常相似:-

{'a':'value A1','b':{'b1':'value B1','b2':'value B2'}}

现在,我们有一个b的DTO,它有b1和b2。

'''

public class B {
    private String b1;
    private String b2;
}

"'同样,我们对整个结构有一个DTO,它具有值String a和bDTO。

'''

public class Z {
private String a;
private B b;
}

''我们制造他们的物品--

b b=new B("value eB1","value eB2"); Z z=new Z("value eA1", b);

现在,我想使用这些DTO进行webClient调用。我尝试的方式是:-

'''

client1.post()
                    .uri("")
                    .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
                    .body(Mono.just(z), Z.class)
                    .retrieve().onStatus(HttpStatus::isError, response -> response.bodyToMono(String.class).map(Exception::new))
                    .bodyToMono(Map.class).block();

'''

当我发送此请求时。服务器接收到的请求是:-{'a':'valueA','b':null}

请告诉我解决这个问题的方法

共有1个答案

斜俊
2023-03-14

默认情况下,WebClient使用Jackson进行JSON序列化。您需要使用@JsonProperty注释来装饰属性

public class B {
        @JsonProperty("b1")
        private String b1;

        @JsonProperty("b2")
        private String b2;

        public B(String b1, String b2) {
            this.b1 = b1;
            this.b2 = b2;
        }
    }

    public class Z {
        @JsonProperty("a")
        private String a;

        @JsonProperty("b")
        private B b;

        public Z(String a, B b) {
            this.a = a;
            this.b = b;
        }
    }

这里有一个简单的测试

B b = new B("valueB1", "valueB2");
Z z = new Z("valueA1", b);

ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(z);

assertEquals("{\"a\":\"valueA1\",\"b\":{\"b1\":\"valueB1\",\"b2\":\"valueB2\"}}", json);
 类似资料:
  • 我在firefox web Browser中使用Rest Client add on。我想测试一个处理HTTP POST请求并使用JSON的web服务。我如何使用Rest Client测试它? 如果在请求正文中添加json,将得到一个*HTTP 415不受支持的媒体类型错误*。 这样做的正确方法是什么?

  • 我正在制作一个小应用程序,我可以使用spring-boot保存用户详细信息。我创建了实体及其相应的存储库。当我发出帖子请求以添加用户的用户对象的id时,该id在保存到数据时为空base.Thisid在MySQL中自动生成(自动增量)。从POST请求中,我得到3个字段,即用户名、电子邮件、密码。用户类包含字段id、用户名、电子邮件、密码。我添加了注释 作为 id 字段。构造函数是 我的用户服务类 我

  • 我有这个代码: 我一直在犯这样的错误: java:不兼容的类型:com。应用句子分类请求。无法将生成器转换为com。应用句子分类请求 我已经使用Maven插件生成了gRPC Java文件。在看了多个例子后,我不确定我的问题是什么。

  • 最大消息长度为64K字节(尽管我可以将其减少到256字节)。 注意:这将运行在一个微小的嵌入式设备上,所以使用像ZMQ这样的消息传递层不是一个选项(没有足够的内存)。 我可以:

  • 问题内容: 单个Servlet如何处理以用户请求形式出现的多个客户端请求?基于单例设计模式,我知道我们创建了一个servlet实例,但是单个servlet如何处理数百万个请求。对其所涉及的线程也感到困惑。 同样,这里提供了任何浏览器规范或设置,可用于跨请求发送请求或生成针对请求发送的线程。 所有框架都相同还是不同(例如,struts v / s springs)? 问题答案: Struts / S

  • 问题内容: 首先,让我解释一下上下文: 我必须创建一个客户端,该客户端将发送许多HTTP请求以下载图像。这些请求必须是异步的,因为一旦完成图像,它将被添加到队列中,然后打印到屏幕上。由于图像可能很大且响应分块,因此我的处理程序必须将其聚合到缓冲区中。 因此,我遵循Netty示例代码(HTTP勺示例)。 目前,我有三个静态映射,用于为每个通道存储通道ID和缓冲区/块布尔值/我的最终对象。 在那之后,