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

如何在RestTemplate.Exchange过程中从字符串返回特定对象?

秦滨海
2023-03-14

我的目标是创建一个Rest控制器,该控制器将返回一个对象(我们称之为Car)。这个Rest控制器正在调用另一个Rest API(使用设置令牌并被授权进行调用所需的头),以便从不同的endpoint获取不同的数据,以便将它们混合在一起。就像如果你问特斯拉大约2个不同的汽车模型创造一个新的疯狂的汽车!

问题是,另一个API给我的对象看起来像{“name”:“automobile2.0”,“motorsize”:“v12”,“color”:“grey”,“weight”:“2000kg”,“year”:“2012”}(实际上我收到28个不同类型的字段,int、string、string数组、nested json,……但我只想保留其中的3个)。并且我无法找到一种方法来使用RestTemplate和Spring框架将其转换为我的Car对象。

同样,如果我能找到一个类似的方式来接收一个列表,这将是完美的。

我已经尝试过使用getForObject或getForEntity,但不幸的是,由于我需要一个头,我不能使用它。

我以前是这样做的:接收一个字符串,然后用Genson和一个转换器反序列化它,但这似乎不是最好的解决方案。

public class Car {
  @JsonProperty("Name")
  private String carName;
  @JsonProperty("MotorSize")
  private String motorSize;
  @JsonProperty("Color")
  private String color;
}

和用于执行Rest API调用的方法:

public Car getCar() {
  UriComponents uriComponents = 
  UriComponentsBuilder.fromUriString(this.myUrl).build();
  HttpHeaders headers = setHeaders(true);  //a private method wich set the header
  HttpEntity<String> request = new HttpEntity<String>(null, headers); //I don't need a body but I do need a header
  ResponseEntity<Car> response = this.restTemplate.exchange(uriComponents.toUriString(), HttpMethod.GET, request, new ParameterizedTypeReference<Car>() {});
  return response.getBody();
}

我知道我的电话起作用了,因为如果我这样做:

ResponseEntity<String> response = this.restTemplate.exchange(uriComponents.toUriString(), HttpMethod.GET, request, String.class);

为了替换响应,我将{“CarName”:“Automobile2.0”,“MotorSize”:“V12”,“Color”:“Grey”}作为response.getBody(),这是我想要的,但它是一个字符串,格式不对。

我期望从getCar()收到的是一辆类似于:

{
   "carName": "automobile2.0",
   "motorSize": "v12",
   "color": " "grey",
}

然后由我的控制器返回,如ResponseEntity(myCar,HttpStatus.ok)

但当我用邮递员尝试我的控制器时,我只收到:

{
   "carName": null,
   "motorSize": null,
   "color": " null,
}

共有1个答案

姬裕
2023-03-14

您可以尝试添加products=mediatype.application_json_value并使用将字符串转换为json的json格式化程序。

 类似资料:
  • 问题内容: 我正在执行上面的存储过程。我收到以下错误: 消息245,级别16,状态1,过程S_Comp,第8行在将varchar值“存在的Amruthanot”转换为数据类型int时,转换失败。 请帮我解决这个问题 问题答案: 您将结果放在值中,而不是传递的值中。 从MSDN (返回) 是 返回 的整数值。存储过程可以将整数值返回到调用过程或应用程序。 更改您的程序。 调用程序

  • 问题内容: 例如,我正在从文本文件中提取文本String,我需要这些词来形成数组。但是,当我执行所有这些操作时,有些单词以逗号(,)或句号(。)结尾,甚至附有括号(这完全是正常现象)。 我要做的是摆脱那些角色。我一直在尝试使用Java中的预定义String方法来做到这一点,但我还是无法解决。 问题答案: 用: replaceAll采用正则表达式。这个: …寻找每个逗号和/或句号。

  • 问题内容: 我有一个在某些情况下会返回字符串的函数,即当程序在Linux或MacOS上运行时,否则返回值应为nil,以便在代码中进一步省略一些特定于OS的检查。 但是,当我尝试编译此代码时,出现错误: test.go:10:3​​:不能在返回参数中使用nil作为类型字符串。 如果我只返回一个空字符串(如),则无法将此返回值与代码中的进一步内容进行比较。 那么问题是如何返回正确的nil字符串值? 谢

  • 问题内容: 这就是我所做的。 我不断收到错误: 消息156,级别15,状态1,过程INITCAP,第97行 关键字“ exec”附近的语法错误。 消息156,级别15,状态1,过程INITCAP,第100行 关键字“ exec”附近的语法错误。 我该怎么办?我希望该过程像在Oracle中一样工作:返回一个名称,例如:“ Steve”,“ Miller” 问题答案: 解决方案1 (我不会使用此解决方

  • 我对Spring靴开发很陌生,我需要一些帮助。 我正在使用JPA /HibernateSpring和CRU存储库创建一个可恢复的Web服务。(json 格式) 我有以下桌位轨迹: 我有以下实体: 污垢: 控制器: 所以我可以得到所有的Track或通过id搜索它们。 现在我的问题来了,我怎样才能返回所有电影名以“公共”或“私人”开头的音轨。 所以我得到了json的回复,比如: 私人: 我需要过滤文件

  • 问题内容: 在我的AJAX调用中,我想将字符串值返回到调用页面。 我应该使用还是返回一个字符串? 问题答案: 您可以使用返回一个纯字符串: 默认情况下返回a 作为其contentType。这是可重载的,因此您还可以执行以下操作: