Jak sprawdzić status HTTP odpowiedzi zawierającej PDF?

0

Musze uderzyć do endpointu POSTem gdzie Content-Type jest application/pdf

Czy jakoś przez x = restTemplate.postForObject mogę to zrobic ?

1

RestTemplate ma pewnie na szytywno ustawiony Content-Type więc powinieneś użyć jakiegoś bardziej generycznego klienta http.

UPDATE O tutaj ktoś buduje sobie coś takiego

HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://exemple.demo.monapi.com/api/v5/submissions"))
        .POST(BodyPublishers.ofFile(FileSystems.getDefault().getPath(f.getAbsolutePath())))
        .header("Authorization", "Token c0198efc82c36812a6a32af0579a8332aa37f7a7")
        .header("Content-Type", "multipart/form-data")
        .build();

https://stackoverflow.com/questions/68647511/how-to-change-content-type-in-httprequest

2

Musisz sobie skonstruować HttpEntity z nagłówkiem content-type i potem go przekazać do postForObject jako parametr.

The request parameter can be a HttpEntity in order to add additional HTTP headers to the request.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/HttpEntity.html

0

A jak nie potrzebuje pobierać całego kontentu a jedynie wysatrczy mi status czy ok czy błąd. To tez muszę peirw i tak i tak pobrac kontent czy nie muszę ?
Potrzebuje sprwadzić czy link działą

Jak powinien wyglądać klasa Repsone ?

org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [pl.Resposne] and content type [application/pdf;charset=UTF-8]
private ResponseEntity<String> printUser(String url, String shipId) {
        RestTemplate restTemplate = new RestTemplate();

        String uri = url + shipId;

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_PDF);
        Response result = restTemplate.postForObject(uri, "", Response.class);


        System.out.println(result.getStatus());

        return (ResponseEntity<String>) ResponseEntity.status(HttpStatus.OK);
    }
0

Jak interesuje Cię status to użyj postForEntity, a skoro nie interesuje Cię zawartość to jako oczekiwany typ daj byte array. Wtedy wszystko przejdzie.

0

Potrzebuje wyciągnąć status, czyli jest ok albo jest bład. Moze też być taka sytuacja że jest zły userId i dostaje
status
errlog

0

Tylko zrób to z głową tzn nie dopuść do sytuacji, że tego typu weryfikacja będzie bardzo często uruchamiana bo PDF z reguł nieco waży i częste pobieranie zasobu to spory narzut na sieć i sprzęt (zarówno Twój jak i po drugiej stronie).

Swoją drogą ciekawy usecase, możesz go opisać nieco szerzej?
Po co to sprawdzanie jeżeli faktycznie tego pdf'a nie potrzebujesz pobrać?
Wygląda to trochę na taką nadgorliwość ze strony aplikacji.

2

Żeby uniknąć pobierania z serwera pliku pdf, można zamiast zapytania GET zrobić HEAD wtedy serwer tylko odpowie statusem czy istnieje endpoint bez zwracania całego pliku.

Potem normalnie jeśli to surowy socket gdzieś low level to parsujesz stringa HTTP/2 200 OK, jeśli masz obiekt to po prostu odwołujesz się do properties o nazwie .status, w javie jest .getStatus()

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