サービスをテストするためのUIアプリケーションを作成しました。 UIはFooServiceUIとの関係があります。 FooServiceUIは、クライアントを使用してBarServiceAccessor(fooserviceuiのインタフェースとして実装されています)にリクエストを送信します。しかし、このようなクライアントの返信を偽って、feignクライアントを使用すると、Springサービスがコンテンツを返しません。
{"datas": [PagedResource { content: [], metadata: Metadata { number: 0, total pages: 1, total elements: 3, size: 200 }, links: [] }]}
BarServiceに直接リクエストを送信すると、これらのすべてのデータが表示されます。
FooService getAllメソッド;
@RequestMapping(method = RequestMethod.GET, path = "/api/datas/")
public ResponseEntity<String> getAllDatas()
{
PagedResources<DataResource> responseEntity = null;
try
{
responseEntity = dataManagementAccessor.getAll(0, 200);
}
catch (Exception e)
{
LOG.error("Exception " + e.toString());
}
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.body("{\"datas\": [" + responseEntity + "]}");
}
アクセッサ;
@FeignClient("https://datamanagement")
public interface DataManagementAccessor{
@RequestMapping(value = "/api/datas/", method = GET)
PagedResources<DataResource> getAll(@RequestParam("page") final Integer page,
@RequestParam("size") final Integer size);
}
BarServiceコードは以下のようになります。
@RequestMapping(method = GET)
@ResponseStatus(OK)
@ApiOperation(value = "Get all datas")
@ApiResponses(value = {@ApiResponse(code = SC_OK, message = "OK", response = DataPageResponse.class),
@ApiResponse(code = SC_BAD_REQUEST, message = BAD_REQUEST_MESSAGE, response = String.class),
@ApiResponse(code = SC_UNAUTHORIZED, message = UNAUTHORIZED_MESSAGE, response = String.class),
@ApiResponse(code = SC_FORBIDDEN, message = FORBIDDEN_MESSAGE, response = String.class),
@ApiResponse(code = SC_NOT_FOUND, message = NOT_FOUND_MESSAGE, response = String.class)})
public PagedResources<Resource<DataResource>> getAll(@PageableDefault(sort = {"name"}) final Pageable pageable,
final PagedResourcesAssembler<DataResource> pagedAssembler)
{
final Page<DataData> allDatas = dataService.getAllDatas(pageable);
final Page<DataResource> pagedResources = allDatas.map(
d-> conversionService.convert(d, DataResource.class));
pagedResources.forEach(resource -> controllerLinkHandler.addDataResourceLink(resource));
return pagedAssembler.toResource(pagedResources);
}
私はすでにクライアントサービスのGradleのに春のJPAを追加しようとしましたともストリームAPIのコレクションが、まだdoesntの仕事を用途に応じてマッピングを変更しようとしました。
応答で_embedded行をシリアル化すると正しく動作しないことがありますか?