小编Kir*_*kov的帖子

如何将一些类的创建从Guice注入器委托给另一个工厂?

例如,RESTEasy的ResteasyWebTarget类有一个方法proxy(Class<T> clazz),就像Injector一样getInstance(Class<T> clazz).有没有办法告诉Guice应该将某些类的创建委托给某个实例?

我的目标是Guice的以下行为:当要求注入器提供A类的新实例时,尝试实例化它; 如果实例化是不可能的,请询问另一个对象(例如ResteasyWebTarget实例)来实例化该类.

我想写一个这样的模块:

@Override
protected void configure() {
    String apiUrl = "https://api.example.com";
    Client client = new ResteasyClientBuilder().build();
    target = (ResteasyWebTarget) client.target(apiUrl);

    onFailureToInstantiateClass(Matchers.annotatedWith(@Path.class)).delegateTo(target);
}
Run Code Online (Sandbox Code Playgroud)

代替

@Override
protected void configure() {
    String apiUrl = "https://api.example.com";
    Client client = new ResteasyClientBuilder().build();
    target = (ResteasyWebTarget) client.target(apiUrl);

    bind(Service1.class).toProvider(() -> target.proxy(Service1.class);
    bind(Service2.class).toProvider(() -> target.proxy(Service2.class);
    bind(Service3.class).toProvider(() -> target.proxy(Service3.class);
}
Run Code Online (Sandbox Code Playgroud)

我已经考虑过实现Injector接口并将该实现用作子注入器,但是接口有太多的方法.

可以编写一个方法来枚举某些包中的所有带注释的接口,并告诉Guice使用提供程序,但这是备份方法.

java guice resteasy

11
推荐指数
1
解决办法
832
查看次数

RestClientException:无法写入请求:找不到适合请求类型的 HttpMessageConverter

我正在尝试使用 RestTemplate 向 REST 服务发送 POST 请求,但出现以下错误

RestClientException:无法写入请求:找不到适合请求类型 [xxx.query.XBrainQueryRequest] 和内容类型 [application/json] 的 HttpMessageConverter。

XBrainQueryRequest request = new XBrainQueryRequest();
// set query ID
request.setQueryId(XBrainTradequeryId);
request.setFlags(new String[]{"ALL_FIELDS"});
ObjectMapper objectMapper = new ObjectMapper();

logger.info("calling XBrainTradeQuery and  Input:{}",objectMapper.writeValueAsString(request));

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_JSON);

 try
       {
       restTemplate = new RestTemplate();

       ResponseEntity<XBrainTradeList> result=null;
       xBrainTradeList =null;

       ResponseEntity<XBrainTradeList> result1 = restTemplate.exchange(XBrainTradeQueryURL, HttpMethod.POST, new HttpEntity(request, headers), XBrainTradeList.class);
Run Code Online (Sandbox Code Playgroud)

我的 XBrainQueryRequest 类如下

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class XBrainQueryRequest {

    private String queryId;
    private String[] flags;
    private String[] attributes;

    /**
     * …
Run Code Online (Sandbox Code Playgroud)

java rest json spring-mvc resttemplate

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×2

guice ×1

json ×1

rest ×1

resteasy ×1

resttemplate ×1

spring-mvc ×1