JSON Java EE metoda POST

0

Hej, mam problem z przyjęciem danych JSONem do swojej Restowej aplikacji. Dopiero się uczę, więc proszę się nie wściekać :)

Aplikacja polega na tym, iż otrzymuje adres URL, wrzuca go na kolejkę, ściąga kod html i zapisuje to wszystko do bazy. Adres przychodzi w formacie JSON i za bardzo nie wiem jak go z niego wyciągnać url, żeby był traktowany jako potrzebny parametr.

@POST
@Consumes(MediaType.APPLICATION_JSON)
    public Response addWebsite(@FormParam("url") String url) {

        facade.sendMessage(url);

        return Response.ok("Strona: " + url + " została pobrana prawidłowo.").build();
    }

Na chwilę obecną jak otrzymuję JSONem adres, jest on brany jako null. Wydaje mi się, że problem tkwi własnie w tym, że z tego JSONa nie jest pobierany url jako String. Czy ktoś mógłby mi podpowiedzieć jak to zrobić w łatwy sposób?

0

Trzaśnij sobie klasę:

class JakaśNonsewnaNazwaITakChodziTylkoOToAbyWyłuskaćUrl {
 public final String url;
   @JsonDeserialize
  public JakaśNonsewnaNazwaITakChodziTylkoOToAbyWyłuskaćUrl (@JsonParam(name="url") String url) {
     this.url = url;
  }
}

I użyj jako argumentu:

[... wszystkie te adnotacje ..]
public Response addWebsite(JakaśNonsewnaNazwaITakChodziTylkoOToAbyWyłuskaćUrl  postedJson) {...

1

Możesz użyć JsonObject, bodajże z pakietu javax.json. To jest obsługa jsona na niskim poziomie - parsujesz stringa, czytasz pola o wskazanych nazwach. W drugą stronę: tworzysz buildera, dodajesz pola, zamieniasz na string.

0

Dziękuję bardzo za pomoc. Najszybciej wyszło przy użyciu JsonObject.

Nie wiem dlaczego,ale przy próbie użycia @JsonDeserialize pojawiał się błąd, że nie mogę tego użyć na konstruktorze :/

1

Nie wiem dlaczego,ale przy próbie użycia @JsonDeserialize pojawiał się błąd, że nie mogę tego użyć na konstruktorze :/

Bo to mój błąd. Przy konstruktorze miał być @JsonCreator. Pisałem na komórce. Z pamięci. I się pomyliłem.
Tu przyķład. Nie z javaee, który powininen działać.
https://github.com/javaFunAgain/ratpong/blob/master/src/main/java/pl/setblack/pongi/users/api/NewUser.java

1

A ja ze swojej strony do obiektów API proponuję:
https://projectlombok.org/features/Value
W połączeniu z:
https://github.com/FasterXML/jackson-databind/issues/905

Działa bardzo fajnie i nie trzeba się bawić w @JsonCreator (i @JsonProperty jeżeli nie ma się ustawionej flagi -parameters)

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