Unexpected Token L when printing a json object Usi

2019-05-11 02:10发布

问题:

Im using a servlet that connects to a database and prints out whether or not you are logged in or not, When using printWriter.write(JsonObject) i get the error in rest Unexpected Token L. I am using a tomcat server to host the data.

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());
}

When printing in the system i get all the correct data, or checking the raw data from rest i get the correct data. But i dont quite understand why the printer is throwing the exception any help is amazing

回答1:

Ok If the error is in the client is beacuse you are returning a mal formed JSON value, so you are returning something like that: { id: 13, name: "Name"}Login invalid then the first character the L is not valid for the JSON Syntax. This is becuase you are writing in the response the json string from the method getFromDatabase out.print(JObject.toString()); and after the method call you add to the response the string result = "Login invalid"; out.write(result); that cause you have a invalid JSON.

One way to solve this is return the JSONObject from the method getFromDatabase, and add the put the result method in this object JObject.put("result", result) and the write the object to the response.