Odpytywany Api przez Service zwraca null

0

Chce stworzyć service, który pobiera dane z innego servicu. Niestety zwraca mi cały czas null bez jakichkolwiek błędów.
Dto

@NoArgsConstructor
@AllArgsConstructor
@Getter
public class ApiDto {
@JsonProperty("Currecies")
    private CurrencyDtos currencies;

}
@NoArgsConstructor
@AllArgsConstructor
@Getter
@JsonIgnoreProperties(ignoreUnknown = true)
public class CurrencyDtos {
    @JsonProperty("PublicationDate")
    private String publicationDate;

    @JsonProperty("Items")
    private List<CurrencyDto> currencies;

}
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class CurrencyDto {

    @JsonProperty("Name")
    private String name;
    @JsonProperty("Unit")
    private String unit;
    @JsonProperty("PurchasePrice")
    private BigDecimal purchasePrice;
    @JsonProperty("SellPrice")
    private BigDecimal sellPrice;
    @JsonProperty("AveragePrice")
    private BigDecimal averagePrice;

}


Klient

@Component
public class ApiClient {

    private final static Logger LOGGER = LoggerFactory.getLogger(ApiClient.class);

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private AppConfig appConfig;


    public ApiDto getCurrencies() {
        List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
        interceptors.add(new HeaderRequestInterceptor("Accept", MediaType.APPLICATION_JSON_VALUE));


        restTemplate.setInterceptors(interceptors);

        return restTemplate.getForObject(appConfig.getNbpApiEndpoint(), ApiDto.class);
    }
}

Kontroler

@RestController
public class ApiController {

    private static final Logger LOGGER = LoggerFactory.getLogger(ApiController.class);

    @Autowired
    private ApiService apiService;


    @RequestMapping(value = "/")
    public ApiDto getCurrencies() {
        return apiService.getCurrencies();

    }
}[]

w załączniku jak wygląda json

logi :

2018-03-23 23:21:59.563 DEBUG 18856 --- [nio-8080-exec-2] o.s.web.client.RestTemplate              : GET request for "http://xxxxxxxxxxxxxxxxxx:8068/currencies" resulted in 200 (OK)
2018-03-23 23:21:59.564 DEBUG 18856 --- [nio-8080-exec-2] o.s.web.client.RestTemplate              : Reading [class com.e.kantor.dto.ApiDto] as "application/json;charset=utf-8" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@6dbfa5fa]
2018-03-23 23:21:59.569 DEBUG 18856 --- [nio-8080-exec-2] m.m.a.RequestResponseBodyMethodProcessor : Written [com.e.kantor.dto.ApiDto@32d967be] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@43af351a]
2018-03-23 23:21:59.569 DEBUG 18856 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2018-03-23 23:21:59.569 DEBUG 18856 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : Successfully completed request
0

takie pytania:
Ty to na produkcji stawiasz? Mogłeś przecież wpisać localhost i by każdy wiedział o co chodzi, po co te xxxxx...

ApiDto? Co to takiego? Pierwszy raz widzę taką konstrukcję.
ApiController? ApiClient? Zawsze myślałem, że API jest po prostu wystawiane i tam masz np. mappingi na kontretny alias. Jaki jest sens zwracania obiektu ApiDto? Zwracasz objekt z wartstwy komunikującej się z DB, który ma mappingi? W jaki sposób to API działa?
Masz CurrencyDto i tworzysz do tego CurrencyDtos tylko po to żeby zwrócić listę CurrencyDto? Dla mnie to jest mindfuck. Wystarczy serwis to pobrania listy i zwrócenia jednego CurrencyDto. Dodaj id i można normalnie działać.
Nie rozumiem po co tu @NoArgsConstructor razem z @AllArgsConstructor. Wystarczy ten drugi.

Wydaje mi się, że się do tego źle zabierasz.

0

Jedyne, co mi na razie przychodzi do głowy, to wartość zwracana z serwisu. Może apiService.getCurrencies() zwraca null? Spróbuj to zdebudować Fiddlerem, albo innym narzędziem (typu proxy) do podglądania ruchu http. Takie narzędzie musisz mieć opanowane.

Edit: chyba że to zwykłe typo (Currecies). Może nie używasz tej samej klasy jako Dto. Powinna być ta sama, z tego samego kodu źródłowego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1