Я пытаюсь использовать API и сохранить результат API в Ehcache, но почему-то он не работает. Он работает, если я просто верну String - PullRequest
0 голосов
/ 05 августа 2020

Ниже представлен класс контроллера, с помощью которого он вызывает метод класса Filemappingservice.

@RestController
public class CacheController implements Serializable{

private static final long serialVersionUID = 1L;

/** The Constant LOGINUSER. */
private static final String LOGINUSER = "loginUser";

@Autowired
private FileMappingServiceImpl fileMappingServiceImpl;

/**
 * @param request
 * @return
 */
@RequestMapping(value = "/getfilemappingdata/", method = RequestMethod.GET)
public String getFileMappingData(HttpServletRequest request) {
    try {

        LoginUser loginUser = (LoginUser) request.getSession().getAttribute(LOGINUSER);
        String response = fileMappingServiceImpl.getPartNamesinCache(loginUser);
        return response;
    } catch (Exception e) {
        e.printStackTrace();
        return "error";
    }
  }
}

Ниже показан класс, в котором я использовал API и пытался сохранить результат в Ehcache.

@Component
public class FileMappingServiceImpl{

private static final String BEARER = "Bearer";

@Cacheable("filemappingdata")
public String getPartNamesinCache(LoginUser loginUser) {
       Map<String, String> headers = new HashMap<>();

        String accessToken = loginUser.getAccess_token();
        headers.put(HttpHeaders.AUTHORIZATION, BEARER + " " + accessToken);
        headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
        String requestBody = {"requetbody"};
        String resourceId = "URL";
        String response = postResource(resourceId, null, headers,requestBody.toString());
        System.out.println(response);
        return response;
    }


public String postResource(String resourceId,
        MultivaluedMap<String, String> parameters,
        Map<String, String> headers, String request) {
    try {
        ClientResponse response;
        Client client = Client.create();
        WebResource webResource = client.resource(resourceId);
        // Set query parameter
        if (parameters != null && !parameters.isEmpty()) {
            webResource = webResource.queryParams(parameters);
        }

        WebResource.Builder webResourceBuilder = webResource
                    .header(HttpHeaders.AUTHORIZATION,
                            headers.get(HttpHeaders.AUTHORIZATION))
                    .header(HttpHeaders.CONTENT_TYPE,
                            headers.get(HttpHeaders.CONTENT_TYPE));
                    //.post(ClientResponse.class, request);
        if(headers.get("User-Locale") != null){
            webResourceBuilder = webResourceBuilder.header("User-Locale", headers.get("User-Locale"));
        }
        response = webResourceBuilder.post(ClientResponse.class, request);
                    System.out.println("postResource"+response);
        return response.getEntity(String.class);

    } catch (Exception e) {
        return Response.Status.SERVICE_UNAVAILABLE.toString();
    }
}
}

Ниже приведен файл конфигурации spring.

@EnableCaching
@Configuration
public class SpringConfig {
 
    private static EhCacheManagerFactoryBean cacheManagerfactoryBean;

    @Bean
    public CacheManager cacheManager() {
        return new EhCacheCacheManager(cacheMangerFactory().getObject());
    }

    @Bean
    public EhCacheManagerFactoryBean cacheMangerFactory() {
        System.out.println("inside chache manger factory");
        cacheManagerfactoryBean = new EhCacheManagerFactoryBean();
        cacheManagerfactoryBean.setConfigLocation(new ClassPathResource("com/test/data/web/init/ehcache.xml"));
        cacheManagerfactoryBean.setShared(true);
        return cacheManagerfactoryBean;
    }
 
}

Ниже приведен ehcache. xml файл

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
    monitoring="autodetect" dynamicConfig="true">

    <diskStore path="java.io.tmpdir" />

    <cache name="filemappingdata" maxEntriesLocalHeap="10000"
        maxEntriesLocalDisk="1000" eternal="false" diskSpoolBufferSizeMB="20"
        timeToIdleSeconds="300" timeToLiveSeconds="600"
        memoryStoreEvictionPolicy="LFU" transactionalMode="off">
        <persistence strategy="localTempSwap" />
    </cache>
</ehcache>

Он отлично работает нормально, если я просто верну стат c строка из getPartNamesinCache Метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...