Я пытаюсь добавить URI к ресурсу, расположенному в другом микросервисе, используя OpenFeign и ResourceAssembler, сохраняя при этом имя хоста из исходного запроса.
При выполнении запроса REST к ресурсу HATEOAS в другом микросервисе метод resource.getId () возвращает ссылку, где имя хоста - это хэш контейнера Docker вместо исходного имени хоста, использованного для выполнения запроса.
Контроллер
@RestController
@RequestMapping("/bulletins")
public class BulletinController {
// Autowired dependencies
@GetMapping(produces = MediaTypes.HAL_JSON_VALUE)
public ResponseEntity<PagedResources<BulletinResource>> getBulletins(Pageable pageable) {
Page<Bulletin> bulletins = bulletinRepository.findAll(pageable);
return ResponseEntity.ok(pagedResourceAssembler.toResource(bulletins, bulletinResourceAssembler));
}
}
Ассемблер
@Component
public class BulletinResourceAssembler extends ResourceAssemblerSupport<Bulletin, BulletinResource> {
private final AdministrationService administrationService;
@Autowired
public BulletinResourceAssembler(AdministrationService administrationService) {
super(BulletinController.class, BulletinResource.class);
this.administrationService = administrationService;
}
@Override
public BulletinResource toResource(Bulletin entity) {
Resource<Site> siteRessource = administrationService.getSiteBySiteCode(entity.getSiteCode());
\\ Set other fields ...
bulletinRessource.add(siteRessource.getId().withRel("site"));
return bulletinRessource;
}
}
Feign Client
@FeignClient(name = "${feign.administration.serviceId}", path = "/api")
public interface AdministrationService {
@GetMapping(value = "/sites/{siteCode}")
Resource<Site> getSiteBySiteCode(@PathVariable("siteCode") String siteCode);
}
Бюллетень ресурсов
@Data
public class BulletinResource extends ResourceSupport {
// fields
}
Ожидаемый результат
скручиваемость http://myhost/api/bulletins
{
"_embedded" : {
"bulletinResources" : [ {
"entityId" : 1,
"_links" : {
"self" : {
"href" : "http://myhost/api/bulletins/1"
},
"site" : {
"href" : "http://myhost/api/sites/000"
}
}
} ]
},
[...]
}
Фактический результат
скручиваемость http://myhost/api/bulletins
{
"_embedded" : {
"bulletinResources" : [ {
"entityId" : 1,
"_links" : {
"self" : {
"href" : "http://myhost/api/bulletins/1"
},
"site" : {
"href" : "http://b4dc1a02586c:8080/api/sites/000"
}
}
} ]
},
[...]
}
Обратите внимание, что href сайта - это b4dc1a02586c, который является идентификатором контейнера Docker.