我在一个应用程序中有一个端点,我想在另一个应用程序中创建端点,该应用程序将调用第一个端点。
第一个是
@AllArgsConstructor
@RestController
@RequestMapping(PASSWORD_RESET)
public class ResetPasswordController {
private final ResetPasswordService passwordService;
private final AgentUtils agentUtils;
private final ObjectMapper objectMapper;
@PostMapping(SEND_CODE)
@HasPermission(Permission.PUBLIC)
@ApiOperation(value = "Sending password reset code",
notes = "Validate request. Generates a random 6 digit value and send it as an SMS to the agent.",
code = 200, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> sendPasswordResetCode(@RequestHeader(HEADER_TENANT_ID) Long tenantId,
@Valid @RequestBody SendResetPasswordCodeReqDto sendResetPasswordCodeReqDto) {
if (!passwordService.isAgentExist(tenantId, sendResetPasswordCodeReqDto.getSocialId(),
sendResetPasswordCodeReqDto.getPhone())) {
return ResponseEntity.notFound().build();
}
passwordService.sendPasswordResetCode(tenantId, sendResetPasswordCodeReqDto);
return ResponseEntity.ok().build();
}
我正在尝试创建的服务
@Service
@Slf4j
public class ResetPasswordService{
private static final String RESET_PASSWORD_URL = "/password-reset";
public ResetPasswordService(SettingsService settingsService,
RestTemplate restTemplate,
MicroServicesHeadersService loginHeadersService) {
super(settingsService, restTemplate, loginHeadersService);
}
public String sendPasswordResetCode(Long tenantId, SendResetPasswordCodeReqDto sendResetPasswordCodeReqDto) {
try {
String responseFromExtService = postToExtServices(
sendResetPasswordCodeReqDto, SEND_CODE_URL, new ParameterizedTypeReference<String>() {}
).getBody();
return responseFromExtService;
} catch (Exception e) {
log.error("Failed to get password reset code");
throw e;
}
}
@SneakyThrows
public <T> ResponseEntity<T> postToExtServices(Object dto, String url, ParameterizedTypeReference<T> responseType) {
String jsonBody = objectMapper.writeValueAsString(dto);
HttpEntity<String> request = new HttpEntity<>(jsonBody, httpHeadersService.getDefaultHttpHeaders());
return restTemplate.exchange(
getResourceUrl() + url,
HttpMethod.POST,
request,
responseType
);
}
问题是,在我当前的实现中,sendPasswordResetCode() 的返回类型是 String,我希望将其更改为 ResponseEntity<String>
就像第一个端点一样。不确定我是否必须更改我的 postToExtServices()
或者我应该更改 sendPasswordResetCode()
?
最佳答案
一开始我误解了你的问题。
你的意思是:
ResetPasswordController
托管在应用程序 A 中。
ResetPasswordService
托管在应用程序 B 中,但会在 postToExtServices
方法中调用应用程序 A?
如果是这种情况,我建议 sendPasswordResetCode
不会返回 ResponeEntity
。 ResponseEntities
通常由应用程序的 Controller
层使用。
关于java - 如何创建通过调用外部端点返回响应实体的端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59543827/