我对基于REST的Web服务很陌生。我试图调用一个小的REST WS,我创建的开始看起来如下
package webServices;
import java.net.UnknownHostException;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.json.JSONException;
import org.json.JSONObject;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.MongoClient;
@Path("/login")
public class LoginService {
@Path("/isUp")
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public String checkServiceStatus(){
return "up and running";
}
@Path("/authenticate")
@POST
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String authenticateUser(@FormParam("user") String user, @FormParam("password") String pwd){
DB db;
DBCollection coll;
MongoClient mongoClient;
String loginResponse="user does not exist";
try {
mongoClient = new MongoClient( "localhost" , 27017 );
db = mongoClient.getDB( "Hackathon" );
coll = db.getCollection("users");
BasicDBObject filter = new BasicDBObject();
filter.put("user", user);
BasicDBObject selectField = new BasicDBObject();
selectField.put("password", 1);
selectField.put("_id", 0);
DBCursor cursor = coll.find(filter, selectField);
String jsonString = cursor.next().toString();
JSONObject json = new JSONObject(jsonString);
String password = json.getString(user);
System.out.println("password "+password);
if(password.equals(pwd)){
loginResponse="success";
System.out.println("success");
}else{
loginResponse="failure";
System.out.println("failure");
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return loginResponse;
}
}
每当我使用form-data
从Chrome邮递员调用POST服务时http://localhost:8080/HackDataEngine/login/authenticate
Content-Type application/json
user admin
password admin
我得到以下回复
<html>
<head>
<title>Apache Tomcat/7.0.67 - Error report</title>
<style>
<!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}-->
</style>
</head>
<body>
<h1>HTTP Status 415 - Unsupported Media Type</h1>
<HR size="1" noshade="noshade">
<p>
<b>type</b> Status report
</p>
<p>
<b>message</b>
<u>Unsupported Media Type</u>
</p>
<p>
<b>description</b>
<u>The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.</u>
</p>
<HR size="1" noshade="noshade">
<h3>Apache Tomcat/7.0.67</h3>
</body>
</html>
答案 0 :(得分:1)
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
尝试使用其中一个,仅限样本MediaType.APPLICATION_JSON
从Rest Service开始,这是一个顶级教程: http://crunchify.com/how-to-build-restful-service-with-java-using-jax-rs-and-jersey/
答案 1 :(得分:1)
您需要在Postman上正确设置标题。
在您的请求标签上,按标题并设置一个新变量。
答案 2 :(得分:0)
感谢大家的快速回复...... JSON型传感器传递工作。如果必须调试原始方法,我在方法参数签名中进行了以下更改,并且它可以正常工作
public String authenticateUser(@FormParam("user") String user, @FormParam("password") String password)
以前是
public String authenticateUser(@FormParam("user") String user, @FormParam("password") String pwd)