我有两个服务(A和B)。我想从服务A向服务B发送一个GET请求。下面是我的请求(服务A):
public Set<StudentDTO> getStudentsByIds(Set<Long> ids) { //here may be a set of ids [123213L, 435564L]
return restTemplate.exchange("localhost:8090/students/all?ids={ids}",
HttpMethod.GET, new HttpEntity<>(ids), new ParameterizedTypeReference<Set<StudentDTO>>() {}, ids).getBody();
}
下面是我的服务B控制器的外观:
@RequestMapping("/students")
public class StudentController {
@GetMapping("/all")
public Set<StudentDTO> getStudentsByIds(@RequestParam Set<Long> ids) {
return studentService.getStudentsByIds(ids);
}
}
我在发送set作为参数时遇到了麻烦。我想我们不能把Set作为参数。我已经试过把set变成字符串,并像下面这样去掉大括号,它起作用了:
String ids = ids.toString().substring(1, ids.toString().length() - 1);
但也许有更好的解决方案或有任何解决方案发送集?
我的URL如下所示:localhost:8090/students/all?ids=id1&ids=id2&ids=id3
1条答案
按热度按时间aor9mmx11#
您的URL格式不正确。使用
all?ids={ids}
时,发送到服务层的结果URL为http://localhost:8090/students/all?ids=%5B23677,%2012345,%201645543%5D
。这是因为集合中的方括号被添加到URL,但未正确解释。您可以通过将其作为逗号分隔的字符串附加到URL来发送来解决此问题,如下所示。