Odpytywany Api przez Service zwraca null

Odpytywany Api przez Service zwraca null
C9
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 6 lat
  • Postów:60
0

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

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

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

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

}
Kopiuj
@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

Kopiuj
@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

Kopiuj
@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 :

Kopiuj
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
edytowany 1x, ostatnio: flowCRANE
TR
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 2 lata
  • Postów:731
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.


musica curat corpus at animam
C9
Nie miałem pomysłu na nazwanie tego może faktycznie nie jest to dobra nazwa. Na co mam przekształcać json z tego Api na obiekty jedynie co go reprezentują. W załączniku jest screen ich struktury (chodzi oczywiście o json z tego "api")
jarekczek
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Siemianowice Śląskie
  • Postów:500
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.


Przeważnie ignoruję niezarejestrowanych użytkowników.
edytowany 1x, ostatnio: jarekczek

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.