Jak pobrać numer wygenerowanego użytkownika?

Jak pobrać numer wygenerowanego użytkownika?
TM
  • Rejestracja:prawie 4 lata
  • Ostatnio:29 dni
  • Postów:91
0

Mam adres, który tworzy mi użytkownika i jest wysyłany przez HTTP POST. W odpowiedzi dostaje status, ale chce dostać również nr tego użytkownika który się wygenerował. Jak to mogę zrobić?

Kopiuj
public int test() throws IOException {
    URL url = new URL("https://test.dpd.ss/createUser_?username=tes&password=test 1&name1=Test&street=Test");
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setRequestMethod("POST");
    con.setRequestProperty("Content-Type", "application/json");
    con.setRequestProperty("Accept", "application/json");
    con.setDoOutput(true);

    InputStream in = con.getInputStream();

odp: z POSTman a aplikacjio nie dziala

Kopiuj
{
    "status": "ok",
    "errlog": "",
    "pl_number": [
        "1133456"
    ]
}
edytowany 2x, ostatnio: TakMaszRacje
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 8 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10074
0

Ale z czym masz problem konkretnie? Numer użytkownika to jest to "1133456"?

TM
  • Rejestracja:prawie 4 lata
  • Ostatnio:29 dni
  • Postów:91
0
Riddle napisał(a):

Ale z czym masz problem konkretnie? Numer użytkownika to jest to "1133456"?

dopisałem. Odp mam z POSTMA a kod nie dziala mi. Dostaje status ale nie mogę wyciągnać tego "pl_number"

edytowany 1x, ostatnio: Riddle
K5
  • Rejestracja:około 6 lat
  • Ostatnio:około 9 godzin
  • Postów:1002
2

W sensie mówisz o "pl_number": [ "1133456" ] ?

Nie baw się w HttpURLConnection tylko użyj

  1. Jeśli masz Springa w projekcie to RestTemplate
  2. Jeśli nie masz, to chociazby HttpClient z Javy 11.

Następnie zdefiniuj sobie klasę w javie, która będzie wyglądać tak jak odpowiedź z API.

Używając tych klientów podajesz jakiego typu ma być odpowiedź (response z API) i masz auotmatyczne mapowanie.
Potem robisz coś w stylu response.getplNumer i finito.

TM
czy wystarczy że użyje RestTemplate czy muszę użyć do tego HttpComponentsClientHttpRequestFactory? Jak wygląda zarządzanie jak uderzam do endpointu na zewnetrzny adres?
K5
Co rozumiesz przez zarządzanie? Co do RT https://www.baeldung.com/rest-template
TM
np, jak pobiore coś z mojego url nic pozniej nie musze robić z tym? Np musze uderzyć do kolku endpointów i z każdego coś wyciągnać i jak wszytsko będzie się zgadzać zakonczyć sukcesem. Czy restTemplate muszę jakoś zamknąć czy nadpisać do każdego endpointu ?
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 8 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10074
0
TakMaszRacje napisał(a):

dopisałem. Odp mam z POSTMA a kod nie dziala mi. Dostaje status ale nie mogę wyciągnać tego "pl_number"

Pokaż w jaki sposób wyciągasz "status"?

TM
  • Rejestracja:prawie 4 lata
  • Ostatnio:29 dni
  • Postów:91
0
Riddle napisał(a):
TakMaszRacje napisał(a):

dopisałem. Odp mam z POSTMA a kod nie dziala mi. Dostaje status ale nie mogę wyciągnać tego "pl_number"

Pokaż w jaki sposób wyciągasz "status"?

con.getResponseCode();

edytowany 1x, ostatnio: Riddle
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 8 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10074
0
TakMaszRacje napisał(a):
Riddle napisał(a):
TakMaszRacje napisał(a):

dopisałem. Odp mam z POSTMA a kod nie dziala mi. Dostaje status ale nie mogę wyciągnać tego "pl_number"

Pokaż w jaki sposób wyciągasz "status"?

con.getResponseCode();

Okej, ale to jest status odpowiedzi HTTP.

To to widzę że dostajesz InputStream, to jest klasa w javie która reprezentuje ciąg danych, które należy otworzyć przeczytać, a potem zamknąć, z reguły jest to ciąg gołych bajtów. Należy go najpierw odczytać jako string - jeśli wiemy ze to jest string (a wiemy, skoro odpowiedzią jest JSON).

Możesz to zrobić np w taki sposób:

Kopiuj
String json = new BufferedReader(
    new InputStreamReader(in , StandardCharsets.UTF_8))
      .lines()
      .collect(Collectors.joining("\n"));

Zmienna in to jest InputStream z przykładu Twojego kodu wyżej.

Następnie taki json musisz sparsować, żeby odczytać z niego pola. Musisz do tego użyć jakiejś biblioteki, np Jackson, Gson, albo np "simple-json": http://www.java2s.com/Code/Jar/j/Downloadjsonsimple11jar.htm

edytowany 1x, ostatnio: Riddle
K5
  • Rejestracja:około 6 lat
  • Ostatnio:około 9 godzin
  • Postów:1002
1
TakMaszRacje napisał(a):

np, jak pobiore coś z mojego url nic pozniej nie musze robić z tym? Np musze uderzyć do kolku endpointów i z każdego coś wyciągnać i jak wszytsko będzie się zgadzać zakonczyć sukcesem. Czy restTemplate muszę jakoś zamknąć czy nadpisać do każdego endpointu ?

Wykonując zapytanie HTTP czekasz na odpowiedź. Jeśli odpowiedź otrzymałeś to nic więcej nie musisz z tym robić. Jeśli uzyskałeś z API jakieś dane to już Twoja decyzja co z nimi zrobisz, jak je obrobisz itp. Jesli uzyskałeś odpowiedź ze statusem oznaczającym błąd to znaczy ze coś zepsułeś. Używając RestTemplate masz to zarządzanie robione automatycznie.

Czy restTemplate muszę jakoś zamknąć czy nadpisać do każdego endpointu ?

Tworzysz jedną instancję i wywołujesz na niej takie operacje jakie potrzebujesz. Czy to wysyłka żądania GET czy POST itp.

edytowany 1x, ostatnio: kixe52
TM
  • Rejestracja:prawie 4 lata
  • Ostatnio:29 dni
  • Postów:91
0

@kixe52 czy jak mam metode a niej odwołania do metody która pobiera mi usera i kolejnych metod które sprawdzają mi statusy linków czy są poprawne to takie rozwiąznie jest dobre ? Ogolne muszę sprwdzić 3 linki jeden pobiera mi wartośc i dwa sprawdzają kolejken endpotny z tą wartoscią. Chce zrobić to w jednej metodzie do której uderzam + inne metody private które będę wykonaywały mi jakąś mini logikę.
I czy te koljne metody powinny mi zwracać Response czy stringa?

Mniej więc coś takiego

Kopiuj
        @GetMapping("test")
    public ResponseEntity<String> startTest()  {
        
        String shipIdLt = createShipment(url);
        if(!shipIdLt.equals(HttpStatus.NOT_FOUND.toString())){
            String response =  createShipment( url, shipIdLt); 
        }else {
            ResponseEntity.status(HttpStatus.OK).body("Error");
        }

        printUser(String url2, String response);
        
        .........
        

       return  ResponseEntity.status(HttpStatus.OK).body("TEST " + shipIdLt);

    }

    private String createShipment(String url ){
        Shipment ship = restTemplate.postForObject(url,"", Shipment.class);

        if(!ship.getStatus().equals("ok")){
            return HttpStatus.NOT_FOUND.toString();
        }

        return ship.getPl_number().get(0).toString();
    }

    private ResponseEntity<String> printUser(String url, String shipId){
// sprawdzenie url 
        return ResponseEntity<String>;
    }
}

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.