在使用 Ribbon 调用广告投放系统 API 之前,我们需要先创建 2 个 VO 对象,AdPlanVO
,AdPlanGetRequestVO
.
// 数据请求对象
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AdPlanGetRequestVO {
private Long userId;
private List<Long> planIds;
}
----------------------------------
//API 请求响应结果反序列化对象
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AdPlanVO {
private Long planId;
private Long userId;
private String planName;
private Integer planStatus;
private Date startDate;
private Date endDate;
private Date createTime;
private Date updateTime;
}
在 AdSearchApplication
启动类中,添加 RestTemplate
客户端。
public class AdSearchApplication {
...
/**
* 注册{@link RestTemplate}Bean
* @return
*/
@Bean
@LoadBalanced // 让 RestTemplate 在调用服务的时候,可以实现负载均衡
RestTemplate restTemplate(){return new RestTemplate();
}
}
创建一个 controller,来测试调用广告提供系统的 API
/**
* SearchController for search information controller
*
* @author <a href="mailto:magicianisaac@gmail.com">Isaac.Zhang | 若初 </a>
*/
@RestController
@Slf4j
@RequestMapping(path = "/search")
public class SearchController {
// 注入 RestTemplate
private final RestTemplate restTemplate;
@Autowired
public SearchController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
@GetMapping(path = "/plan/get-ribbon")
public CommonResponse<List<AdPlanVO>> getAdPlansUseRibbon(@RequestBody AdPlanGetRequestVO requestVO) {log.info("ad-search::getAdPlansUseRibbon -> {}", JSON.toJSONString(requestVO));
return restTemplate.postForEntity("http://mscx-ad-sponsor/ad-sponsor/plan/get", requestVO, CommonResponse.class).getBody();}
@GetMapping(path = "/user/get")
public CommonResponse getUsers(@Param(value = "username") String username) {log.info("ad-search::getUsers -> {}", JSON.toJSONString(username));
CommonResponse commonResponse = restTemplate.getForObject("http://mscx-ad-sponsor/ad-sponsor/user/get?username={username}", CommonResponse.class, username
);
return commonResponse;
}
}