打印 json 对象时出现意外的令牌 L 使用高级休息 chrome
Posted
技术标签:
【中文标题】打印 json 对象时出现意外的令牌 L 使用高级休息 chrome【英文标题】:Unexpected Token L when printing a json object Using advanced rest chrome 【发布时间】:2014-01-04 02:56:53 【问题描述】:我正在使用连接到数据库并打印出您是否登录的 servlet,当使用 printWriter.write(JsonObject)
时,我在 rest Unexpected Token L 中得到错误。我正在使用 tomcat 服务器来托管数据.
public class Login extends HttpServlet
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/employeedatabase";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
static Connection conn = null;
static Statement stmt = null;
static ResultSet rs;
static PrintWriter out;
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Login()
super();
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
response.setContentType("application/json; charset=UTF-8");
out = response.getWriter();
String email = request.getParameter("username");
String password = request.getParameter("password");
String result = "";
if(Validation.validateNull(email) && Validation.validateNull(password))
if(!Validation.validateEmail(email))
result = "Invalid email";
if(databaseFuctions.Login(email,password))
result = "Login accepted";
try
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(DB_URL, USER, PASS);
stmt = conn.createStatement();
getFromDatabase("manager",email,request,response);
// getFromDatabase("qa",email,request,response);
// getFromDatabase("developer",email,request,response);
catch (Exception e1)
// TODO Auto-generated catch block
System.out.println(e1.getMessage());
else if(!databaseFuctions.Login(email, password))
result = "Login invalid";
else
result = "No login/password entered";
out.write(result);
public static void getFromDatabase(String table,String email,HttpServletRequest request, HttpServletResponse response)
JSONObject JObject = new JSONObject();
ResultSet ds;
try
ds = stmt.executeQuery("SELECT * from "+table+" where email = '"+email+"'");
while(ds.next())
int id = ds.getInt("id");
int salary = ds.getInt("salary");
String name = ds.getString("name");
String role = ds.getString("role");
String emailAddress = ds.getString("email");
String phone = ds.getString("phone");
JObject.put("id", id);
JObject.put("salary", salary);
JObject.put("name", name);
JObject.put("role", role);
JObject.put("email", emailAddress);
JObject.put("phone", phone);
catch (Exception e)
System.out.println(e.getMessage());
out.print(JObject.toString());
out.flush();
System.out.println(JObject.toString());
在系统中打印时,我得到了所有正确的数据,或者检查了其余的原始数据,我得到了正确的数据。但我不太明白为什么打印机抛出异常任何帮助都很棒
【问题讨论】:
Servlet
中的可变和共享 static
字段是一个很大的禁忌。
另外,请显示完整的堆栈跟踪。
java端没有错误,查看信息时来自其他客户端,java保存的原始数据工作正常,我可以sysout并获取信息。当实际打印时,即 out.print 就是当 rest 在 json 数据中出现 Unexpected 令牌 L 时。但原始数据是正确的信息。
【参考方案1】:
好的,如果错误出现在客户端是因为您正在返回格式错误的 JSON 值,因此您正在返回类似的内容: id: 13, name: "Name"Login invalid
那么 L 的第一个字符对于 JSON 语法无效。
这是因为您在响应中写入来自方法 getFromDatabase out.print(JObject.toString());
的 json 字符串,并且在方法调用之后您将字符串 result = "Login invalid"; out.write(result);
添加到响应中,这会导致您的 JSON 无效。
解决此问题的一种方法是从方法 getFromDatabase 返回 JSONObject,并将结果方法添加到此对象JObject.put("result", result)
并将对象写入响应。
【讨论】:
感谢您的回答,我现在觉得很愚蠢,因为这很容易解决! 不客气,我过去也遇到过类似的问题,这是我们学习的方式。以上是关于打印 json 对象时出现意外的令牌 L 使用高级休息 chrome的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jest 测试 Angular 时出现“意外的令牌导入”
尝试使用 webpack 和 babel 加载 css 时出现意外令牌