springMVC-Verarbeitung von JSON und HttpMessageConverter<T>

Detaillierte Beschreibung: Die Zielmethode gibt normalerweise die für JSON erforderlichen Daten zurück, bei denen es sich um ein Objekt oder eine Sammlung handeln kann. Hier geben wir ein Dog-Objekt zurück und konvertieren es in das Json-Datenformat

Beispielfall:

Wenn wir in springmve eine Sammlungsliste usw. oder ein Objekt zurückgeben, kann springmve es basierend auf den Anmerkungen neu kodieren, es in Daten im JSON-Format umwandeln und an den Browser zurückgeben.

0. Fügen Sie Abhängigkeiten hinzu und bringen Sie sie mit, wenn Sie den Frühling einführen

1. Erstellen Sie eine neue JavaBean von cat 

public class Cat {
    private String name;
    private String address;
    public Cat() {
    }

2. Schreiben Sie einen Handler und verwenden Sie @ReposeBody, um die Zielmethode zu ändern

@Controller
public class JsonHandler {
    @RequestMapping(value = "/getJson")
    @ResponseBody
    public Cat getJson() {
        Cat cat = new Cat();
        cat.setName("宝宝");
        cat.setAddress("广西");
        return cat;
    }
}

3,

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script type="text/javascript"  src="script/jquery-3.7.1.min.js"></script>
    <script type="text/javascript">
        $(function(){
             $("#getJson").click(function () {
            //这是一个完整的请求
            var href = this.href;
            alert(href);
            var args = {"time":new Date()};
            $.post(href,args,function(data){
                //data就是服务器返回的json数据
                alert("name ="+data.name+"address ="+data.address);
                }
            )
            //阻止超链接提交请求
            return false;
            })
        })
    </script>

</head>
<body>
<a href="getJson" id="getJson">点击获取Json数据</a>
</body>
</html>

4. Wirkung

Prinzipbeschreibung 

SpringMVC verlässt sich bei der Konvertierung auf HttpMessageConverter<T>.

(1). Verwenden Sie HttpMessageConverter<T>, um die Anforderungsinformationen zu konvertieren und an die Eingabeparameter der Verarbeitungsmethode zu binden oder das Antwortergebnis in den entsprechenden Typ von Antwortinformationen umzuwandeln. Spring bietet zwei Möglichkeiten: Verwenden Sie @RequestBody/@ResponseBody als Ziel Die Methodenanmerkung verwendet HttpEntity<T>/ResponseEntity<T> als Eingabeparameter oder Rückgabewert der Zielmethode.


(2) Wenn die Controller-Verarbeitungsmethode @RequestBody/@ResponseBody oder HttpEntity<T>/ResponseEntity<T> verwendet, wählt Spring zuerst den passenden HttpMessageConverter basierend auf dem Accept-Attribut des Anforderungsheaders oder Antwortheaders aus und wählt dann den passenden aus HttpMessageConverter basierend auf dem Parametertyp oder generisch Filtern Sie den Typ, um den passenden HttpMessageConverter zu erhalten. Wenn kein verfügbarer HttpMessageConverter gefunden wird, wird ein Fehler gemeldet.


(3).@RequestBody und @ResponseBody müssen nicht paarweise erscheinen

@RequestBody-Anmerkung

Durch die Annotation @Reauestbodv können die empfangenen Reauest-Anfragedaten [wie Felder, Dateien ...] direkt in String konvertiert werden. Manchmal haben wir während der Entwicklung einen solchen Bedarf.

(Anforderung: Wenn das Front-End beispielsweise eine Datei übergibt, möchten wir direkt deren String-Zeichenfolge.) Das heißt, die Datei kann in Form einer Zeichenfolge empfangen werden.

1. Schreiben Sie eine Zielmethode und ändern Sie mit @RequestBody die Parameter der Zielmethode, sodass sie beim Empfang konvertiert wird.

 @RequestMapping(value = "/getJson01")

    public void getJson01(@RequestBody String content) {
        System.out.println("文件的内容 "+content);
       
    }
<h1>提交一个文件</h1>
<form action="/getJson01" method="post" enctype="multipart/form-data">
    文件:<input type="file" name="file"><br>
    提交:<input type="submit" value="提交">
</form>

2. Wirkung: Nachdem Sie zum Senden der Datei geklickt haben, wird der Dateiinhalt „Hallo Welt“ von test.txt abgerufen.

Dokument herunterladen

Basierend auf den Eigenschaften von HttpMessageConverter<T> kann eine Datei-Download-Funktion implementiert werden.

In SpringMVC kann die Funktion zum Herunterladen von Dateien implementiert werden, indem der Typ ResponseEntity<T> zurückgegeben wird.


@Controller
public class DownloadHandler {
    @RequestMapping(value = "/download")
    public ResponseEntity<byte[]> download(HttpSession session) throws IOException {
        //先获取到你要下载的文件的字节输入流inputStream
        InputStream is = session.getServletContext().getResourceAsStream("/images/java.png");
        //开辟一个字节数组存放文件数据
        byte[] bytes = new byte[is.available()];
        is.read(bytes);

        HttpStatus status =  HttpStatus.OK; //返回成功
        HttpHeaders headers = new HttpHeaders();//这是告诉浏览器这是返回的一个文件,需要弹出窗口
        headers.add("Content-Disposition", "attachment;filename=java.png");
        return  new ResponseEntity<byte[]>(bytes, headers, status);
    }
}
<h1>测试文件下载</h1>
<a href="download">下载文件</a>

おすすめ

転載: blog.csdn.net/qq_36684207/article/details/135122611