2016-05-03 7 views
0

Ich sende eine sehr lange Zeichenfolge als Http response body als Teil der Spring-Anwendung, und die Antwort String umfasst Zeilen des Zugriffsprotokolls von denen jede Zeile sollte ein Tabulatorzeichen (\ t) sowie ein neues Zeilenzeichen (\ n) haben. String.format("%s\t%s\n", accessLog.getIpAddress(), accessLog.getDate()) Wie eine ausführliche Zeichenfolge mit ResponseBody einschließlich Zeilenvorschubzeichen und Tab-Zeichen übergeben

Prüfung der API durch Charles Proxy, beide Sonderzeichen sind auch gezeigt:

Jede Zeile wird wie gemacht. Wenn Sie jedoch dasselbe mit dem Chrome-Browser testen, werden sowohl \ t als auch \ n aus irgendeinem Grund durch ein Leerzeichen ersetzt.

Plus, ich sende diese Zeilen des Zugriffsprotokolls mit Spring @ResponseBody Annotation. Irgendein Problem damit?

Unten ist Controller.java:

@RequestMapping("/get_access_log.do") 
@ResponseBody 
public String test() throws Exception { 
    return result = accessLogBO.extractTest(); 
} 

AccessLogBO.java:

public String extractTest() throws IOException { 

    String inputFile = "C:\\Users\\input.txt"; 
    String response = ""; 


    FileReader fr = new FileReader(inputFile); 
    BufferedReader br = new BufferedReader(fr); 
    StringBuilder sb = new StringBuilder(); 
    String line = null; 
    while((line = br.readLine()) != null) { 
     String formattedLine = format(line); 
     sb.append(formattedLine); 
     } 
    } 

    br.close(); 
    fr.close(); 

    return sb.toString(); 
} 

private String format(String line) { 
    AccessLog accessLog = parseAccessLog(line); 
    return String.format("%s\t%s\n", accessLog.getIpAddress(), accessLog.getDate()); 
} 

Fehlerfall Screenshot: Error case screenshot from Chrome brower

Jeder mich aus dieser helfen könnte? Irgendwelche Kommentare würden wirklich geschätzt werden! Vielen Dank.

+0

Wenn Chrome Ihre Ausgabe als HTML interpretiert, wird das erwartet. Zeig uns deinen Code. –

+0

@JBNizet Da der obige Controller seine Antwort direkt in den eigentlichen Antworttextteil schreibt, ist der Inhaltstyp text/plain. Btw, der Code ist eingefügt. Vielen Dank. – choiapril

+0

Wie wird dieser Fehler in Chrome angezeigt? Was sagt die Chrome-Netzwerkkonsole zum Inhaltstyp? Wenn Sie sich den Antworttext in der Chrome-Netzwerkkonsole ansehen, sehen Sie Ihre Tabs und Zeilenumbrüche? Irgendein Screenshot? –

Antwort

0

Chrome interpretiert die Antwort als HTML, da der Inhaltstyp nicht text/plain ist.

Die Einstellung text/plain als produzierten Inhaltstyp in der RequestMapping-Annotation sollte das Problem beheben.