Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring boot中创建动态服务_Java_Spring_Spring Boot - Fatal编程技术网

Java 在spring boot中创建动态服务

Java 在spring boot中创建动态服务,java,spring,spring-boot,Java,Spring,Spring Boot,我需要一种创建动态/通用rest客户端的方法。我的spring boot应用程序需要连接到许多第三方客户机,它们都有不同的请求主体、响应主体,有些需要特殊的头,而有些需要特殊的授权/身份验证(例如基本身份验证、JWT、HMAC等) 到目前为止,我已经设法找到了以下客户 public class GenericRestClient<T, V> { private RestTemplate restTemplate = new RestTemplate(); publ

我需要一种创建动态/通用rest客户端的方法。我的spring boot应用程序需要连接到许多第三方客户机,它们都有不同的请求主体、响应主体,有些需要特殊的头,而有些需要特殊的授权/身份验证(例如基本身份验证、JWT、HMAC等)

到目前为止,我已经设法找到了以下客户

public class GenericRestClient<T, V> {

    private RestTemplate restTemplate = new RestTemplate();

    public V execute(RequestDetails requestDetails, T data, ResponseErrorHandler errorHandler,
            Class<V> genericClass) throws ResourceAccessException, Exception {

        restTemplate.setErrorHandler(errorHandler);
        HttpHeaders headers = new HttpHeaders();

        HttpEntity<T> entity = new HttpEntity<T>(data, headers);
        ResponseEntity<V> response = restTemplate.exchange(requestDetails.getUrl(), requestDetails.getRequestType(),
                entity, genericClass);
        return response.getBody();
    }

}
公共类GenericRestClient{
私有RestTemplate RestTemplate=新RestTemplate();
public V execute(RequestDetails RequestDetails、T data、ResponseErrorHandler errorHandler、,
类genericClass)引发ResourceAccessException,异常{
setErrorHandler(errorHandler);
HttpHeaders=新的HttpHeaders();
HttpEntity=新的HttpEntity(数据、标题);
ResponseEntity response=restTemplate.exchange(requestDetails.getUrl(),requestDetails.getRequestType(),
实体(通用类);
返回response.getBody();
}
}
但我的问题是。现在是否有一种方法可以在所有必要的头、身份验证和授权都有不同的需求时生成它们?我该怎么做

有没有一种方法可以像脚本(例如JTX)一样将java代码存储在数据库中并使用它们,或者有没有更好的方法来满足我的需要


我希望这样,即使有新客户机出现,也不需要再进行编码。

您可以将每个客户机的配置存储在数据库中。如果您使用JPA,您将得到这样的类:

@Entity
class RestClientConfiguration{
    private String url;
    private Map<String,String> headers;

    //whatever data you need
}

就这样。希望我能满足你的需求。如果有什么不清楚的地方,请告诉我,我们会解决的:)

是否有一种方法可以这样做,即使新客户到来,也不需要编写代码。是否可以从数据库或脚本中获取配置?我希望它是非常动态和通用的。我相信是这样的。你可以在任何地方保留配置,只需设置
RestTemplate
查看该教程:但是根据这一点,如果出现新的客户端配置,我必须创建一个新的rest模板。没错,你对此有什么反对意见吗?我的团队负责人希望这样,当新客户端出现时,更改只能在数据库中进行,而不能在代码本身中进行。
public class GenericRestClient<T, V> {

    public V execute(RequestDetails requestDetails, T data, ResponseErrorHandler errorHandler,
            Class<V> genericClass, RestClientConfiguration clientConfiguration) throws ResourceAccessException, Exception {

        String url = clientConfiguration.getUrl();
        Map<String, String> headerMap = clientConfiguration.getHeaders();

        //here add code which map headerMap which is a Map to HttpHeaders object


        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setErrorHandler(errorHandler);
        HttpHeaders headers = new HttpHeaders();


        HttpEntity<T> entity = new HttpEntity<T>(data, headers);
        ResponseEntity<V> response = restTemplate.exchange(requestDetails.getUrl(), requestDetails.getRequestType(),
                entity, genericClass);
        return response.getBody();
    }
}