2016-06-15 7 views
0

Ich habe eine einfache Spring MVC RestControllerSpring MVC: Header in einem RestController hinzugefügt nicht zurück

@RestController 
@RequestMapping(value = "/xxx") 
public class MyResource { 

Einer der Endpunkt soll eine ZIP-Datei zurück, so habe ich diese:

@RequestMapping(value = "/xxx", method = RequestMethod.GET) 
    public void downloadZip(HttpServletResponse response) { 
     InputStream is = ... 
     IOUtils.copy(is, response.getOutputStream()); 
     response.setContentType("application/zip"); 
     response.setHeader(HttpHeaders.CONTENT_DISPOSITION, attachment; filename=myfile.zip); 
     response.flushBuffer(); 
    } 

Das obige soll ein ZIP zurückgeben und zwei zusätzliche Header für den Browser hinzufügen, um zu wissen, dass es etwas ist, das einen Download auslöst.

Aber das ist nicht der Fall, wenn ich die Response-Header mit Chrome-Netzwerk-Tools überprüfen, sind die Header genau die gleichen wie vor der Anfrage den Endpunkt getroffen. Der Inhalt-Typ ist immer noch Application/Json und die Content-Disposition ist nicht einmal da.

Ich habe benutzerdefinierte Header namens "App-Version". Ich habe einen Test ein versuchen, den Wert Änderung zu sehen, ob es

geändert wird tatsächlich
response.setHeader("app-version","hello"); 

Aber nein, wenn ich die Antwort überprüfen Sie die „App-Version“ Header ist immer noch, was vor dem Anruf war.

Muss ich irgendetwas aktivieren, um den Header in meinem Controller ändern zu können?

Antwort

0

Versuchen Sie, den Rückgabetyp von Lücke zu String

public String downloadZip(HttpServletResponse response) { 
     ... 
     return ""   
    } 

Ich denke, Frühling wird keine Änderung in Header anwenden zu ändern, wenn der Endpunkt nicht alles zurück.

+0

in der Tat !! Wenn ein "" zurückgegeben wird, dann werden meine Header geändert! – Johny19