我想触发一种方法来创建ArrayList
和return
此列表到callback-URL
。此方法可能需要一段时间才能生成数据,因此它应该是异步运行方法。
所以我有几个问题:
callback-URL
?我假设这是URL
方法将值返回到?return
value
到callback-URL
?如何在返回后访问该值?
@Async
@GetMapping("/createcustomer/{start}/{end}"){
public ArrayList<Customer> createCustomer(@PathVariable int start,
@PathVariable int end) {
//code to generate random data
return arrayList;
}
答案 0 :(得分:1)
为了调用您的处理程序方法,您可以在前端使用javascript代码。以下是如何使用axios库执行此操作的示例:
axios.get('createcustomer/something/something')
.then(function (response) {
console.log(response);
// response.data will contain your json with returned list content
})
.catch(function (error) {
console.log(error);
});
您还需要修改您的hanlder方法,如下所示:
@ReponseBody
@GetMapping("createcustomer/{start}/{end}"){
public ArrayList<Customer> createCustomer(@PathVariable int start,
@PathVariable int end) {
//code to generate random data
return arrayList;
}
@ResponseBody注释将导致ArrayList作为响应正文中的json返回。或者,您可以将@Controller类注释更改为@RestController。它将使此类中的所有处理程序方法返回给客户端。
这样,请求将完全异步,您可以在前端代码中尽快访问它。
修改强>
如果你想使用callback-url在其他地方发送这个列表,你可以使用RestTemplate发送带有list作为正文的post请求。您可以在处理程序方法中使用与此代码类似的内容:
String callback-URL = "http://my.server.com/customerListEndpoint";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<?> entity = new HttpEntity<>(headers);
restTemplate.exchange(callback-URL,HttpMethod.POST,entity,ArrayList.class);
您需要一个可以使用post back-URL映射请求的端点。类似的东西:
@PostMapping("/customerListEndpoint"){
public void createCustomer(@RequestBody ArrayList<Customer> arrayList) {
// do what you want with arrayList here
}
另外,请务必在某些类中配置RestTemplate bean,并使用@Configuration配置:
@Bean
public RestTemplate restTemplate() {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setOutputStreaming(false);
RestTemplate restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(requestFactory));
restTemplate.getMessageConverters()
.add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
return restTemplate;
}