gpt4 book ai didi

java - 将参数传递给 restTemplate.getForObject 的最佳方式

转载 作者:行者123 更新时间:2023-12-01 14:21:33 24 4
gpt4 key购买 nike

为了编写干净智能的代码,我想知道我可以做些什么来改进我的实际代码:

public JSONObject getCustomer(final String customerId) {
if (customerId == null || customerId.equals("")) {
return null;
} else {
final RestTemplate restTemplate = new RestTemplate();
final String result = restTemplate.getForObject("http://localhost:6061/customers/" + customerId,
String.class);
return new JSONObject(result);
}
}

特别是,我不喜欢我编写 url 的方式,也不喜欢检查 customerId 的值。

我想要类似 JPA 的东西,我在其中询问一些传递参数的信息,只是为了清楚(在伪代码中):

public JSONObject getCustomer(final String customerId) {
final RestTemplate restTemplate = new RestTemplate();
final Query query = restTemplate.query("http://localhost:6061/customers/:customerId");

query.addParameter("customerId", customerId);
JSONObject result = query.getForObject();

return result;
}

然后,如果 customerIdnull 或一些空格或不存在,我希望结果为 null。有没有办法用标准库做到这一点?

谢谢

最佳答案

首先,我会删除 else分支并将条件重构为:

public JSONObject getCustomer(final String customerId) {
if (isNull(customerId) || customerId.trim().isEmpty()) {
return null;
}
...
}

其次,如果你有一堆 URI 变量,Spring guys recommend使用 Map<String, String> :

final String templateURL = "http://localhost:6061/customers/{customerId}";
final Map<String, String> variables = new HashMap<>();

variables.put("customerId", customerId);
...

template.getForObject(templateURL, String.class, variables);

第三,该方法不应创建 RestTemplate实例本身。我更愿意将已调整的对象注入(inject)实例字段:

getTemplate().getForObject(templateURL, String.class, variables);

最后,我将命名为 result更有意义:

final String customerRepresentation = ...;

一些注意事项:

  1. getCustomer实际上返回一个 JSONObject , 不是 Customer .
  2. templateURL对基本 URL 以及客户的 URL 进行硬编码。
  3. 该方法做了很多工作(承担了太多责任)- 参数验证、URL 构造、发出请求。尝试在相应的方法之间拆分这些职责。

关于java - 将参数传递给 restTemplate.getForObject 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47578663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com