春季转换魔术

知更鸟

我有如下一段代码来调用我们的服务之一。

MultiValueMap<String, String> parametersMap = new LinkedMultiValueMap<>();
            parametersMap.add("query", query);
            parametersMap.add("locale", "en_US");
            parametersMap.add("resultsLimit", Boolean.FALSE.toString());
            parametersMap.add("maxResults", maxResults);
            parametersMap.add("type", "TTT");
            parametersMap.add("ids", commaSeparatedValues(ids));
            parametersMap.add("infoTypes", "HHH,JJJ");
            HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(parametersMap, getHttpHeaders());
            MyEntity myEntity = restTemplate.postForEntity("http://example.com", httpEntity, MyEntity.class);

在服务器端,控制器代码就像

    @RequestMapping("my/service")
                public MyEntity suggest(@RequestParam(required = true) String query, @RequestParam(required = true) String locale,
@RequestParam(required = false) String resultsLimit, @Valid OtherOptions options) 

和OtherOption类就像

class OtherOptions {
              String maxResults;
              String type;
              String ids;
              String infoTypes;
            }

在这里一切正常,但是我对诸如之类的东西感到困惑。

  1. 是获取请求还是发布请求?
  2. 某些参数映射内容如何变成请求参数(查询参数),而另一些则如何映射到OtherOptions的对象?
  3. 请求的实际内容是哪一个?
Kavithakaran Kanapathippillai:
  1. 是获取请求还是发布请求?

    这是一个发帖请求。你在打电话restTemplate.postForEntity但是您的服务器端方法不受限制,因为您没有指定method属性,RequestMapping因此同一方法可以从服务器角度处理任何http方法。

  2. 某些参数映射内容如何变成请求参数(查询参数),而另一些参数如何映射到OtherOptions的对象?

    它们都不是查询参数。有关的含义,请参见spring docs @RequestParam在您的情况下,它们全部来自正文,而不是作为查询参数

    https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html

    https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html#postForEntity-java.net.URI-java.lang.Object-java.lang。类-

    实体的主体或请求本身可以是用于创建多部分请求的MultiValueMap。

  3. 请求的实际内容是哪一个?

    parametersMap是http请求的正文。

注意:当前,您的呼叫应该会失败,因为您正在将呼叫发布到http://example.com客户端并在服务器端进行监听my/service

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

神秘的魔术码,类型转换

PHP魔术方法__toNumber()将对象转换为数字

用图像魔术转换PDF,留下额外的空白

春季启动:将类转换为bean

如何避免重复转换春季ConversionService?

春季在RestTemplate中进行unicode转换

用MongoTemplate转换mongo请求(春季)

春季启动:注册mongodb自定义转换器

如何在春季将JdbcTemplate转换为Flux?

春季豆:扫描转换器,注入CustomConversionServiceFactory

MultipartFile文件名的特殊字符转换为?在春季启动

如何从春天这个代码转换为春季启动?

如何对象的页面转换成列表春季数据

春季:添加基本URL破坏了JSON转换

春季转换服务-从列表<A>到列表<B>

转换对象MethodSignature时出错。春季AOP

在春季将pojo转换为JSON的最佳方法是什么

为什么调用Python的“魔术方法”不会像对相应的运算符那样进行类型转换?

使用图像魔术将图像转换为png而不更改其名称

java.lang.Object继承; 不能被转换到模型类:误差在春季启动

枚举字符串转换春季批量导入过程中失败

在春季启动中将所有mysql表数据转换为JSON

Java的春季启动REST API - 补丁 - “java.util.LinkedHashMap中不能被转换为XXX”

春季安全:转换内存身份验证数据库

春季消息传递将json字符串转换为地图

用注解替换SimpleFormController(春季<3到4.3转换)

在春季靴中将复杂的Jason响应转换为dto的最佳实践

如何在春季将图像转换为多部分文件

春季和跨上下文:WebAsyncManager无法强制转换为WebAsyncManager