英文:
How to search for a person in a datbase using an API
问题
@GET
@Path("/seeuser/{idnum}")
@Produces(MediaType.APPLICATION_JSON)
public Response seeuser(@PathParam("idnum") String idnum) {
String responseString = "{\"status_code\":0}";
StringBuilder crunchifyBuilder = new StringBuilder();
try {
String jsonString = crunchifyBuilder.toString();
Map<String, String> myMap = gson.fromJson(jsonString, mapType);
String handle = myMap.get("handle");
Map<String,String> teamMap = Launcher.dbEngine.seeuser(idnum, handle);
responseString = Launcher.gson.toJson(teamMap);
} catch (Exception ex) {
StringWriter sw = new StringWriter();
ex.printStackTrace(new PrintWriter(sw));
String exceptionAsString = sw.toString();
ex.printStackTrace();
return Response.status(500).entity(exceptionAsString).build();
}
return Response.ok(responseString)
.header("Access-Control-Allow-Origin", "*").build();
}
DBEngine.java
public Map<String,String> seeuser(String idnum, String handle) {
Map<String,String> userIdMap = new HashMap<>();
PreparedStatement stmt = null;
Integer id = Integer.parseInt(idnum);
try
{
Connection conn = ds.getConnection();
String queryString = null;
queryString = "SELECT * FROM Identity WHERE handle = ?";
stmt = conn.prepareStatement(queryString);
stmt.setInt(1,id);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
handle = rs.getString("handle");
String pass = rs.getString("pass");
String fullname = rs.getString("fullname");
String location = rs.getString("location");
String email = rs.getString("email");
String bdate = rs.getString("bdate");
userIdMap.put("handle", handle);
userIdMap.put("pass", pass);
userIdMap.put("fullname", fullname);
userIdMap.put("location", location);
userIdMap.put("email", email);
userIdMap.put("bdate", bdate);
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
return userIdMap;
}
请注意,由于您要求只翻译代码部分,我已经将代码翻译为中文,但保留了代码中的变量名、函数名和注释等内容的原样。如果您需要进一步的解释或帮助,请随时提问。
英文:
I am writing a HTTP-based RESTful API SMP and I need to write an API that looks up a users with the same handle as the input and returns all the user information, so the entire row. But right now it is not returning anything. I cannot find the problem, any suggestions on what it might be? Thank you for any help!
/api/seeuser // find a user and give information
// Input: curl -d '{"handle":"@cooldude42", "password":"mysecret!"}' -H "Content-Type: application/json" -X POST http://localhost:9990/api/seeuser/2 (Links to an external site.)
// 2 = Identity.idnum
// Output: {"status":"1", "handle":"@carlos", "fullname":"Carlos Mize", "location":"Kentucky", "email":carlos@notgmail.com", "bdate":"1970-01-26","joined":"2020-04-01"}
// Output: {}. // no match found, could be blocked, user doesn't know. [EDIT: 04/14]
// etc.
API.java
@GET
@Path("/seeuser/{idnum}")
@Produces(MediaType.APPLICATION_JSON)
public Response seeuser(@PathParam("idnum") String idnum) {
String responseString = "{\"status_code\":0}";
StringBuilder crunchifyBuilder = new StringBuilder();
try {
String jsonString = crunchifyBuilder.toString();
Map<String, String> myMap = gson.fromJson(jsonString, mapType);
String handle = myMap.get("handle");
Map<String,String> teamMap = Launcher.dbEngine.seeuser(idnum, handle);
responseString = Launcher.gson.toJson(teamMap);
} catch (Exception ex) {
StringWriter sw = new StringWriter();
ex.printStackTrace(new PrintWriter(sw));
String exceptionAsString = sw.toString();
ex.printStackTrace();
return Response.status(500).entity(exceptionAsString).build();
}
return Response.ok(responseString)
.header("Access-Control-Allow-Origin", "*").build();
}
DBEngine.java
public Map<String,String> seeuser(String idnum, String handle) {
Map<String,String> userIdMap = new HashMap<>();
PreparedStatement stmt = null;
Integer id = Integer.parseInt(idnum);
try
{
Connection conn = ds.getConnection();
String queryString = null;
queryString = "SELECT * FROM Identity WHERE handle = ?";
stmt = conn.prepareStatement(queryString);
stmt.setInt(1,id);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
handle = rs.getString("handle");
String pass = rs.getString("pass");
String fullname = rs.getString("fullname");
String location = rs.getString("location");
String email = rs.getString("email");
String bdate = rs.getString("bdate");
userIdMap.put("handle", handle);
userIdMap.put("pass", pass);
userIdMap.put("fullname", fullname);
userIdMap.put("location", location);
userIdMap.put("email", email);
userIdMap.put("bdate", bdate);
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
return userIdMap;
}
答案1
得分: 0
我假设句柄被传递给方法Launcher.dbEngine.seeuser(idnum, handle)时为null或空。
变量'crunchifyBuilder' 最初是一个新的StringBuilder(),因此是空的。然后代码按照以下方式进行:
String jsonString = crunchifyBuilder.toString();
Map<String, String> myMap = gson.fromJson(jsonString, mapType);
String handle = myMap.get("handle");
我不确定上述代码是否会将句柄设置为任何值,除非我漏掉了什么?
英文:
I am assuming the handle is being passed as null or empty to the method Launcher.dbEngine.seeuser(idnum, handle).
The variable 'crunchifyBuilder' started as a new StringBuilder() which would be empty. Then the code follows as below
String jsonString = crunchifyBuilder.toString();
Map<String, String> myMap = gson.fromJson(jsonString, mapType);
String handle = myMap.get("handle");
I'm not sure the above code would set the handle to any value, unless I am missing something?
专注分享java语言的经验与见解,让所有开发者获益!
评论