我正在使用JaxRS jersey作为服务器,我已经在aws上部署了它。对服务器的Http post请求正在与邮递员一起使用,但不与Http post apache客户端一起使用。 以下是我的Java for Rest服务
"@types/socket.io-client": "1.4.30",
"socket.io-client": "2.0.3",
"socket.io": "2.0.3",
以下是我的trackerdetails类
// hide all divs
$( 'div' ).hide()
// fade in: duration 1s on complete call function
$( '#title' ).fadeIn(1000, function(){
// fade out: duration 1s, on complete call function
$( '#title' ).fadeOut(1000, function(){
// fade in: duration 1s
$( '#hub' ).fadeIn(1000)
})
})
以下是我的客户端http发布请求
@Path("/data")
public class MyResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<trackerdetails> getIt() {
SessionFactory sessionfactory = new Configuration().configure().buildSessionFactory();
Session session = sessionfactory.openSession();
session.beginTransaction();
trackerdetails user = new trackerdetails();
List<trackerdetails> sendlist = (List<trackerdetails>) session.createQuery("from trackerdetails").list();
session.getTransaction().commit();
session.close();
return sendlist;
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public trackerdetails putit(trackerdetails track) {
track.setDate(new Date());
SessionFactory sessionfactory = new Configuration().configure().buildSessionFactory();
Session session = sessionfactory.openSession();
session.beginTransaction();
session.save(track);
session.getTransaction().commit();
session.close();
return track;
}
以下是我的错误状态是400 错误请求
描述客户端发送的请求在语法上是不正确的。
答案 0 :(得分:0)
您的REST API需要JSON
格式的请求,但使用NameValuePair
构建请求正文的方式不会导致JSON
格式。
您应该使用一些可以将对象转换为JSON
JSON
的库,或者您可以手动构建Jackson
请求正文,然后创建一个有效的JSON
请求正文给你的API打电话。
以下是手动构建JSON
请求正文的一种方法 -
HttpPost httpPost = new HttpPost("myurl");
StringBuilder jsonBody = new StringBuilder();
jsonBody.append("{");
jsonBody.append("\"devicename\" : ").append("\"vip\"").append(",");
// Pass a valid date because on server side, you are using Date object for accepting it
jsonBody.append("\"date\" : ").append("\"2017-09-23\"").append(",");
jsonBody.append("\"latitude\" : ").append("\"vip\"").append(",");
jsonBody.append("\"longitude\" : ").append("\"vip\"");
jsonBody.append("}");
StringRequestEntity requestEntity = new StringRequestEntity(jsonBody.toString(),"application/json","UTF-8");
httpPost.setRequestEntity(requestEntity);
httpPost.setHeader("Cache-Control", "no-cache");
httpPost.setHeader("Content-type", "application/json");
httpPost.setHeader("Host", "trackertest.herokuapp.com");
// Rest code should remain same