wake-up-neo.com

Übergeben Sie mehrere Parameter an die Rest-API - Spring

Ich versuche herauszufinden, ob es möglich ist, ein JSON-Objekt an die Rest-API zu übergeben oder mehrere Parameter an diese API zu übergeben. Und wie liest man diese Parameter im Frühling? Nehmen wir an, die URL sieht wie in den folgenden Beispielen aus: 

Beispiel 1 http://localhost:8080/api/v1/mno/objectKey?id=1&name=saif

Ist es gültig, ein JSON-Objekt wie in der folgenden URL zu übergeben?

Ex.2 http://localhost:8080/api/v1/mno/objectKey/{"id":1, "name":"Saif"}

Fragen:

1) Kann ein JSON-Objekt wie in Beispiel 2 an die URL übergeben werden?

2) Wie können wir die Parameter in Beispiel 1 übergeben und analysieren? 

Ich habe versucht, einige Methoden zu schreiben, um mein Ziel zu erreichen, konnte aber nicht die richtige Lösung finden.

Ich habe versucht, das JSON-Objekt als @RequestParam zu übergeben

http://localhost:8080/api/v1/mno/objectKey?id=1 Es ist ein unerwarteter Fehler aufgetreten. (type=Unsupported Media Type, status=415). Content type 'null' not supported

http://localhost:8080/api/v1/mno/objectKey/id=1 Es ist ein unerwarteter Fehler aufgetreten. (type=Not Found, status=404). No message available

http://localhost:8080/api/v1/mno/objectKey/%7B%22id%22:1%7D Es ist ein unerwarteter Fehler aufgetreten. (type=Not Found, status=404). No message available

@RequestMapping(value="mno/{objectKey}",
                method = RequestMethod.GET, 
                consumes="application/json")
    public List<Book> getBook4(@RequestParam ObjectKey objectKey) {
        ...
    }

Ich habe versucht, das JSON-Objekt als @PathVariable zu übergeben

@RequestMapping(value="ghi/{objectKey}",method = RequestMethod.GET)
    public List<Book> getBook2(@PathVariable ObjectKey objectKey) {
        ...         
    }

Ich habe dieses Objekt erstellt, um den id-Parameter und andere Parameter wie name usw. aufzunehmen. 

class ObjectKey{
        long id;
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
    }
14
Saif Masadeh

(1) Kann ein JSON-Objekt wie in Beispiel 2 an die URL übergeben werden?

Nein, weil http://localhost:8080/api/v1/mno/objectKey/{"id":1, "name":"Saif"} keine gültige URL ist.

Wenn Sie es REST-fähig machen möchten, verwenden Sie http://localhost:8080/api/v1/mno/objectKey/1/Saif und definieren Sie Ihre Methode folgendermaßen:

@RequestMapping(path = "/mno/objectKey/{id}/{name}", method = RequestMethod.GET)
public Book getBook(@PathVariable int id, @PathVariable String name) {
    // code here
}

(2) Wie können wir die Parameter in Beispiel 1 übergeben und analysieren?

Fügen Sie einfach zwei Anforderungsparameter hinzu und geben Sie den richtigen Pfad an.

@RequestMapping(path = "/mno/objectKey", method = RequestMethod.GET)
public Book getBook(@RequestParam int id, @RequestParam String name) {
    // code here
}

UPDATE(aus Kommentar)

Was ist, wenn wir eine komplizierte Parameterstruktur haben?

"A": [ {
    "B": 37181,
    "timestamp": 1160100436,
    "categories": [ {
        "categoryID": 2653,
        "timestamp": 1158555774
    }, {
        "categoryID": 4453,
        "timestamp": 1158555774
    } ]
} ]

Senden Sie das als POST mit den JSON-Daten im Anforderungstext und nicht in der URL. Geben Sie als Inhaltstyp application/json an.

@RequestMapping(path = "/mno/objectKey", method = RequestMethod.POST, consumes = "application/json")
public Book getBook(@RequestBody ObjectKey objectKey) {
    // code here
}
43
Andreas

sie können mehrere Parameter in URL wie übergeben 

http: // localhost: 2000/custom? brand = Dell & limit = 20 & price = 20000 & sort = asc

und um diese Abfragefelder zu erhalten, können Sie map like verwenden

    @RequestMapping(method = RequestMethod.GET, value = "/custom")
    public String controllerMethod(@RequestParam Map<String, String> customQuery) {

        System.out.println("customQuery = brand " + customQuery.containsKey("brand"));
        System.out.println("customQuery = limit " + customQuery.containsKey("limit"));
        System.out.println("customQuery = price " + customQuery.containsKey("price"));
        System.out.println("customQuery = other " + customQuery.containsKey("other"));
        System.out.println("customQuery = sort " + customQuery.containsKey("sort"));

        return customQuery.toString();
    }
8
Om Sharma

Ja, es ist möglich, ein JSON-Objekt als URL zu übergeben

queryString = "{\"left\":\"" + params.get("left") + "}";
 httpRestTemplate.exchange(
                    Endpoint + "/A/B?query={queryString}",
                    HttpMethod.GET, entity, z.class, queryString);
0
techspl

Mehrere Parameter können wie folgt angegeben werden:

    @RequestMapping(value = "/mno/{objectKey}", method = RequestMethod.GET, produces = "application/json")
    public List<String> getBook(HttpServletRequest httpServletRequest, @PathVariable(name = "objectKey") String objectKey
      , @RequestParam(value = "id", defaultValue = "false")String id,@RequestParam(value = "name", defaultValue = "false") String name) throws Exception {
               //logic
}
0
Rohit Dubey