Jak pobrać numer wygenerowanego użytkownika?

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ć?

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

{
    "status": "ok",
    "errlog": "",
    "pl_number": [
        "1133456"
    ]
}
0

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

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"

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.

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"?

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();

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:

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

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.

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

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

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