Heim  >  Artikel  >  Java  >  Einführung in die Methode zum Empfangen und Antworten von JSON-Daten durch SpringMVC (mit Code)

Einführung in die Methode zum Empfangen und Antworten von JSON-Daten durch SpringMVC (mit Code)

不言
不言nach vorne
2019-03-12 15:41:284660Durchsuche

Dieser Artikel bietet Ihnen eine Einführung in die Methode zum Empfangen und Reagieren auf JSON-Daten (mit Code). Ich hoffe, dass er für Sie hilfreich ist.

Zusätzlich zur Übermittlung von Daten über das Formularformular können Front-End- und Back-End-Dateninteraktionen auch Daten im JSON-Format über Ajax an das Back-End senden und empfangen (diese Methode kann die Trennung von Anforderungen realisieren). Daten und Seite). In diesem Artikel werden verschiedene Möglichkeiten zum Empfangen und Antworten auf JSON-Daten in Spring MVC zusammengefasst.

Vorbereitungsschritte:
1. Importieren Sie die Abhängigkeiten von JSON-bezogenen Frameworks (z. B. Jackson).
2. Die Controller-Methode von Spring MVC wird normal geschrieben. Wenn Sie auf JSON antworten müssen, fügen Sie die Annotation @responsebody hinzu.
3. Bevor Sie die JSON-Eingabeparameter akzeptieren, fügen Sie die Annotation @RequestBody hinzu.
Der Server empfängt JSON-Daten und stellt sie in einem Java-Objekt wieder her, was als Deserialisierung bezeichnet wird. Im Gegensatz dazu wird das Konvertieren des Java-Objekts in JSON-Daten als Antwort und das Zurücksenden an den Client als Serialisierung bezeichnet.

Hinweis: Da Sie Ajax verwenden möchten, müssen Sie jQuery einführen. Denken Sie daran!

Jackson Maven-Abhängigkeit:

        <!-- jackson依赖 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.7.0</version>
        </dependency>

1. Mit Entitätsklasse empfangen

Hintergrund: Wenn Ajax viele Parameter übergibt, ist es nicht praktisch, die Methode zum Abgleich von Parameternamen zu verwenden. Wenn im Hintergrund eine entsprechende Entitätsklasse vorhanden ist, können Sie die Daten im JSON-Format auf dem Client kapseln und an den Hintergrund übergeben. Der Hintergrund verwendet dann die entsprechende Entitätsklasse, um sie zu empfangen.

Client:

<button onclick="clickMe()">点我</button>
<script>
    function clickMe() {
        $.ajax({
            type : 'POST',
            url : "acceptJsonByEntity",
            contentType : "application/json;charset=utf-8",
            // 如果想以json格式把数据提交到后台的话,JSON.stringify()必须有,否则只会当做表单提交
            data : JSON.stringify({
                "bookId" : 1,
                "author" : "Jack"
            }),
            // 期待返回的数据类型
            dataType : "json",
            success : function(data) {
                var bookId = data.bookId;
                var author = data.author;
                alert("success:" + bookId+','+author);
            },
            error : function(data) {
                alert("error" + data);
            }
        });
</script>
@responseBody-Annotation besteht darin, das von der Controller-Methode zurückgegebene Objekt über einen geeigneten Konverter in das angegebene Format zu konvertieren und es dann in den Textbereich der Antwort zu schreiben Objekt, normalerweise mit der Rückgabe von JSON-Daten oder XML.

Die Annotation @RequestBody wird häufig verwendet, um Inhalte zu verarbeiten, deren Inhaltstyp nicht der Standardcodierung application/x-www-form-urlcoded entspricht. Im Allgemeinen wird es häufig zur Verarbeitung von Anwendungs-/JSON-Typen verwendet.

Controller:

@Controller
public class PassJsonParam {
    @RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST)
    @ResponseBody
    public Book acceptJsonByEntity(@RequestBody Book book, HttpServletRequest request){
        System.out.println("当前http请求方式为:"+request.getMethod());
        System.out.println("bookId="+book.getBookId()+", author="+book.getAuthor());
        return book;
    }
}

Konsolenausgabe: Die aktuelle HTTP-Anfragemethode ist: POST bookId=1, author=Jack

Client (Popup-Fenster): Erfolg :1,Jack


Wenn alle Methoden im Controller Daten im JSON-Format zurückgeben müssen, können Sie die Annotation @RestController verwenden.

@RestController = @Controller + @ResponseBody

Controller (der obige Controller kann durch den folgenden ersetzt werden):

@RestController
public class PassJsonParam {
    @RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST)
    public Book acceptJsonByEntity(@RequestBody Book book, HttpServletRequest request){
        System.out.println("当前http请求方式为:"+request.getMethod());
        System.out.println("bookId="+book.getBookId()+", author="+book.getAuthor());
        return book;
    }
}

Hinweis: Nach Verwendung der @RestController-Annotation , Controller Die Methode kann keine JSP-Seiten oder HTML mehr zurückgeben und der konfigurierte Ansichtsparser funktioniert nicht.

2. Im Kartenmodus empfangen

Hintergrund: Das Frontend sendet eine Ajax-Anfrage an das Backend und trägt viele Parameter, aber das Backend verfügt nicht über die entsprechende Entitätsklasse, um sie zu empfangen Ich tue? Am gebräuchlichsten ist das Formular, bei dem Sie die Verwendung einer Karte zur Lösung in Betracht ziehen können. Da die Datenstruktur der Karte im Schlüsselwertformat vorliegt, können wir das Suchfeldformular durchlaufen und den Namen des Formulars als Schlüssel der Karte und den Wert des Formulars als Wert der Karte verwenden.

Client:

<form id="bookForm">
    <input type="text" name="bookName" id="bookName">
    <input type="text" name="author" id="author" >
    <button onclick="submitForm(event)">提交</button>
</form>

<script>
    function submitForm(event) {
        //阻止form默认事件
        event.preventDefault();
        //得到搜索框数据
        var map = new Map();
        $("#bookForm input").each(function () {
            var value = $(this).val();      //input 值
            var name = $(this).attr('name');
            map.set(name,value);
        })

        //Map转为Json的方法
        var obj= Object.create(null);
        for (var [k,v] of map) {
            obj[k] = v;
        }

        $.ajax({
            type: 'POST',
            contentType:'application/json',
            url: "acceptJsonByMap",
            data: JSON.stringify(obj),
            dataType: 'json',
            success: function (data) {
                var bookName = data.bookName;
                var author = data.author;
                alert("bookName ="+bookName+"; author="+author);
            },
            error: function (data) {
                alert("失败啦");
            }
        });
    }
</script>

Controller:

    @RequestMapping(value="acceptJsonByMap")
    @ResponseBody
    public Map<String,Object> acceptJsonByMap(@RequestBody Map<String,Object> paramsMap, HttpServletRequest request){
        System.out.println("当前http请求方式为:"+request.getMethod());
        System.out.println(paramsMap);
        return paramsMap;
    }

Konsolenausgabe: Die aktuelle HTTP-Anfragemethode ist: POST {bookName=Love, author=Frank}

Client (Pop -up-Fenster): bookName =Love; author=Frank

3. Im Listenmodus empfangen (in JSON-Array-Form übergeben)

Client:

<button onclick="clickHere()">clickHere</button>
<script>
    function clickHere() {
        var params1 = {
            "bookId":"123",
            "author":"Rose"
        };
        var params2 = {
            "bookId":"321",
            "author":"Jack"
        };
        var list = [];
        list.push(params1);
        list.push(params2);

        $.ajax({
            type: 'POST',
            contentType:'application/json',
            url: "acceptJsonByList",
            data: JSON.stringify(list),
            dataType: 'json',
            success: function (data) {
                for (let i = 0; i < data.length; i++) {
                    var bookId = data[i].bookId;
                    var author = data[i].author;
                    alert("bookId ="+bookId+"; author="+author);
                }
            },
            error: function (data) {
                alert("失败啦");
            }
        });
    }
</script>

Hinweis : Bei der Übergabe an das Backend sollte die Liste JSON-Formatdaten von [ { key1 : value1} { key2 : value2} ] enthalten, andernfalls kann ein Json-Analysefehler auftreten.

Controller:

    @RequestMapping(value="acceptJsonByList")
    @ResponseBody
    public List<Book> acceptJsonByList(@RequestBody List<Book> book, HttpServletRequest request){
        System.out.println("当前http请求方式为:"+request.getMethod());
        System.out.println(book);
        return book;
    }

Hinweis: Zum Empfangen ist hier die Entitätsklasse „Book“ erforderlich.

Konsolenausgabe: Die aktuelle HTTP-Anfragemethode ist: POST [entity.Book@1138a75c, entity.Book@22d1cbcf]

Client (Popup-Fenster): bookId =123; author= Rose bookId =321; Autor=Jack

Das obige ist der detaillierte Inhalt vonEinführung in die Methode zum Empfangen und Antworten von JSON-Daten durch SpringMVC (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen