这样的 builder 代码,让我是在恶心难熬,于是我规划用 lombok 重构这段代码:
- @Builder
- public class Student {
- private String name;
- private int age;
- }
挪用方法:
- Student student = Student.builder().name("zs").age(24).build();
署理模式
正如我们所知的,在措施中挪用 rest 接口是一个常见的举动举措,假如你和我一样行使过 spring 的 RestTemplate,我信托你会我和一样,对他抛出的非 http 状态码非常切齿腐心。
以是我们思量将 RestTemplate 最为底层包装器举办包装器模式的计划:
- public abstract class FilterRestTemplate implements RestOperations {
- protected volatile RestTemplate restTemplate;
- protected FilterRestTemplate(RestTemplate restTemplate){
- this.restTemplate = restTemplate;
- }
- //实现RestOperations全部的接口
- }
然后再由扩展类对 FilterRestTemplate 举办包装扩展:
- public class ExtractRestTemplate extends FilterRestTemplate {
- private RestTemplate restTemplate;
- public ExtractRestTemplate(RestTemplate restTemplate) {
- super(restTemplate);
- this.restTemplate = restTemplate;
- }
- public <T> RestResponseDTO<T> postForEntityWithNoException(String url, Object request, Class<T> responseType, Object... uriVariables)
- throws RestClientException {
- RestResponseDTO<T> restResponseDTO = new RestResponseDTO<T>();
- ResponseEntity<T> tResponseEntity;
- try {
- tResponseEntity = restTemplate.postForEntity(url, request, responseType, uriVariables);
- restResponseDTO.setData(tResponseEntity.getBody());
- restResponseDTO.setMessage(tResponseEntity.getStatusCode().name());
- restResponseDTO.setStatusCode(tResponseEntity.getStatusCodeValue());
- }catch (Exception e){
- restResponseDTO.setStatusCode(RestResponseDTO.UNKNOWN_ERROR);
- restResponseDTO.setMessage(e.getMessage());
- restResponseDTO.setData(null);
- }
- return restResponseDTO;
- }
- }
包装器 ExtractRestTemplate 很美满的变动了非常抛出的举动,让措施更具有容错性。在这里我们不思量 ExtractRestTemplate 完成的成果,让我们把核心放在 FilterRestTemplate 上,“实现 RestOperations 全部的接口”,这个操纵绝对不是一时半会可以写完的,其时在重构之前我险些写了半个小时,如下:
- public abstract class FilterRestTemplate implements RestOperations {
- protected volatile RestTemplate restTemplate;
- protected FilterRestTemplate(RestTemplate restTemplate) {
- this.restTemplate = restTemplate;
- }
- @Override
- public <T> T getForObject(String url, Class<T> responseType, Object... uriVariables) throws RestClientException {
- return restTemplate.getForObject(url,responseType,uriVariables);
- }
- @Override
- public <T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException {
- return restTemplate.getForObject(url,responseType,uriVariables);
- }
- @Override
- public <T> T getForObject(URI url, Class<T> responseType) throws RestClientException {
- return restTemplate.getForObject(url,responseType);
- }
- @Override
- public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Object... uriVariables) throws RestClientException {
- return restTemplate.getForEntity(url,responseType,uriVariables);
- }
- //其他实当代码略。。。
- }
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|