gpt4 book ai didi

spring - 如何使用 java 使用 spring 数据休息服务?

转载 作者:行者123 更新时间:2023-12-02 04:36:29 25 4
gpt4 key购买 nike

我有以下 spring boot + data Rest 存储库:

    @RepositoryRestResource(collectionResourceRel = "dto", path = "produtos")
public interface ProdutoRepository extends CrudRepository<Produto, Integer> {
@Query("SELECT p FROM Produto p where descricao LIKE CONCAT(UPPER(:like),'%')")
List<Produto> findByLike(@Param("like") String like);
}

我还有一个访问此方法的 java 客户端(这是我的示例):
    String url = "http://localhost:8080/produtos/search/findByLike?like={like}";
RestTemplate t = new RestTemplate();
ProdutoDto resp = t.getForObject(url, ProdutoDto.class, txtLoc.getText());

ProdutoDto(这不是完全必要的):
public class ProdutoDto extends HalDto<Produto> {}

HalDto:
public class HalDto<T extends ResourceSupport> extends ResourceSupport {
@JsonProperty("_embedded")
private EmbeddedDto<T> embedded;

public EmbeddedDto<T> getEmbedded() {
return embedded;
}

public void setEmbedded(EmbeddedDto<T> embedded) {
this.embedded = embedded;
}
}

嵌入式Dto:
public class EmbeddedDto<T> {
@JsonProperty("dto")
private List<T> dtoList;

public List<T> getDtoList()
{
return dtoList;
}

public void setDto(List<T> dtoList) {
this.dtoList = dtoList;
}
}

这些类是必要的(我认为),因为 Spring Data 以 HAL ( https://en.wikipedia.org/wiki/Hypertext_Application_Language ) 格式返回数据。

注意:Produto 必须扩展 ResourceSupport。

注意事项:所有 collectionResourceRel 必须命名为“dto”,并且仅适用于集合(可能会调整)。

这是正确的方法吗?

我搜索了一下,发现了很多做服务器端的例子,但几乎没有关于构建客户端的例子。

谢谢。

最佳答案

这是我发现的一个似乎运作良好的解决方案。

首先,设置您的 RestTemplate以便它需要 JSON/HAL 并知道如何处理它:

@Bean
public RestTemplate restTemplate() {

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new Jackson2HalModule());
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
MappingJackson2HttpMessageConverter messageConverter =
new MappingJackson2HttpMessageConverter();
messageConverter.setObjectMapper(objectMapper);
messageConverter.setSupportedMediaTypes(Arrays.asList(MediaTypes.HAL_JSON, MediaType.APPLICATION_JSON_UTF8));
return new RestTemplate(Arrays.asList(messageConverter));

}

然后您可以使用 exchange RestTemplate 的方法指定您希望结果为 ResponseEntity<PagedResources<Producto>>
ResponseEntity<PagedResources<Producto>> resultResponse = restTemplate.exchange(uri, HttpMethod.GET, HttpEntity.EMPTY, new ParameterizedTypeReference<PagedResources<Producto>>(){});

if(resultResponse.getStatusCode() == HttpStatus.OK){
Collection<Producto> results = resultResponse.getBody().getContent();
log.info("{} results obtained", results.size());
}

您可以实例化 restTemplate通过调用 restTemplate()上面定义的方法,或者您可以注入(inject)( Autowiring )它。

关于spring - 如何使用 java 使用 spring 数据休息服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42232169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com