来自Postman的HTTP Post工作但不通过浏览器

时间:2017-09-22 06:45:43

标签: javascript java eclipse jersey jax-rs

我正在使用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  错误请求

描述客户端发送的请求在语法上是不正确的。

1 个答案:

答案 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