在jsp文件中将Content-Type设置为application/json

yacmzcpb  于 2023-09-28  发布在  其他
关注(0)|答案(3)|浏览(166)

我创建了一些jsp文件,它返回一些json字符串作为响应。但我看到Content-Type自动设置为txt
我的jsp代码看起来像

<%@ page import="java.util.Random" %>
<%@ page language="java" %>
<%@ page session="false" %>

<%
  String retVal = "// some json string";

     int millis = new Random().nextInt(1000);
     //    System.out.println("sleeping for " + millis + " millis");
     Thread.sleep(millis);
%>
<%=retVal%>

我怎么能表演像

setHeader("Content-Type", "application/json");

在这个例子中?

vh0rcniy

vh0rcniy1#

你可以通过Page directive
举例来说:

<%@ page language="java" contentType="application/json; charset=UTF-8"
    pageEncoding="UTF-8"%>
  • contentType=“mimeType [ ; charset=characterSet ]”|“text/html;字符集=ISO-8859-1”

JSP文件用于发送给客户机的响应的MIME类型和字符编码。您可以使用对JSP容器有效的任何MIME类型或字符集。默认MIME类型为text/html,默认字符集为ISO-8859-1。

wixjitnu

wixjitnu2#

试试这段代码,它应该也能工作

<%
    //response.setContentType("Content-Type", "application/json"); // this will fail compilation
    response.setContentType("application/json"); //fixed
%>
w80xi6nr

w80xi6nr3#

@Petr Mensik & kensen john
谢谢,我不能使用页面指令,因为我必须根据一些URL参数设置不同的内容类型。我将把我的代码粘贴在这里,因为它是JSON中很常见的东西:

<%
        String callback = request.getParameter("callback");
        response.setCharacterEncoding("UTF-8");
        if (callback != null) {
            // Equivalent to: <@page contentType="text/javascript" pageEncoding="UTF-8">
            response.setContentType("text/javascript");
        } else {
            // Equivalent to: <@page contentType="application/json" pageEncoding="UTF-8">
            response.setContentType("application/json");
        }
    
        [...]
    
        String output = "";
    
        if (callback != null) {
            // IMPORTANT! Sanitise the "callback",
            // do not use user input directly in the response!
            // This is vulnerable to XSS attacks.
            output += callback + "(";
        }
    
        output += jsonObj.toString();
    
        if (callback != null) {
            output += ");";
        }
    %>
    <%=output %>

当提供callback时,返回:

callback({...JSON stuff...});

内容类型为“text/JavaScript”
当未提供callback时,返回:

{...JSON stuff...}

内容类型为“application/json”
[编辑]我在看我的旧文章。如果您使用此解决方案,请清理您的输入!把用户输入字符串直接放在响应中是危险的。

相关问题