2017-09-22 1 views
1

J'utilise JaxRS jersey pour le serveur et je l'ai déployé sur aws. Http post demande au serveur travaille avec le facteur mais pas avec le client post apache Http. Ce qui suit est mon Java pour le service RestHTTP Post de Postman travaillant mais pas via le navigateur

@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; 
    } 

Suite est ma trackerdetails classe

@Entity 
@XmlRootElement 
public class trackerdetails { 
    @Id @GeneratedValue(strategy = GenerationType.AUTO) 
    private int autoid; 
    private String latitude; 
    private String longitude; 
    private String devicename; 
    private Date date; 
    public trackerdetails(){ 

    } 
    public int getAutoid() { 
     return autoid; 
    } 
    public void setAutoid(int autoid) { 
     this.autoid = autoid; 
    } 
    public String getLatitude() { 
     return latitude; 
    } 
    public void setLatitude(String latitude) { 
     this.latitude = latitude; 
    } 
    public String getLongitude() { 
     return longitude; 
    } 
    public void setLongitude(String longitude) { 
     this.longitude = longitude; 
    } 
    public String getDevicename() { 
     return devicename; 
    } 
    public void setDevicename(String devicename) { 
     this.devicename = devicename; 
    } 
    public Date getDate() { 
     return date; 
    } 
    public void setDate(Date date) { 
     this.date = date; 
    } 

suivant est mon côté client demande post http

HttpPost httpPost = new HttpPost("myurl"); 
List <NameValuePair> nvps = new ArrayList <NameValuePair>(); 
nvps.add(new BasicNameValuePair("devicename", "vip")); 
nvps.add(new BasicNameValuePair("date", "hjksvn")); 
nvps.add(new BasicNameValuePair("latitude", "hello")); 
nvps.add(new BasicNameValuePair("longitude","hi")); 
httpPost.setEntity(new UrlEncodedFormEntity(nvps)); 


httpPost.setHeader("Cache-Control", "no-cache"); 
httpPost.setHeader("Content-type", "application/json"); 
httpPost.setHeader("Host", "trackertest.herokuapp.com"); 


CloseableHttpResponse response2 = httpclient.execute(httpPost); 

try { 
    System.out.println(response2.getStatusLine()); 
    System.out.println(response2.toString()); 
    HttpEntity entity2 = response2.getEntity(); 
    // do something useful with the response body 
    // and ensure it is fully consumed 
     BufferedReader rd = new BufferedReader(
    new InputStreamReader(response2.getEntity().getContent())); 

StringBuffer result1 = new StringBuffer(); 
String line = ""; 
while ((line = rd.readLine()) != null) { 
    result1.append(line); 

     System.out.println(line); 
     System.out.println(""); 
} 
System.out.println(result1); 
    EntityUtils.consume(entity2); 
} finally { 
    response2.close(); 
} 

Ce qui suit est mon statut d'erreur est de 400 Mauvais Demande

description La requête envoyée par le client était syntaxiquement incorrecte.

+0

'HttpPost HttpPost = new HttpPost ("myurl"),' semble différent changer plz à 'HttpPost HttpPost = new HttpPost (myurl); ' – Srinivasu

+0

l'URL est correcte je voulais dire que j'ai ajouté l'URL – user2515173

Répondre

0

Votre API REST attend la requête au format JSON, mais la façon dont vous construisez le corps de la demande à l'aide de NameValuePair n'aboutira pas au format JSON.

Vous devriez faire un corps de demande JSON valide soit en utilisant des bibliothèques qui peuvent convertir objet en JSON comme Jackson ou vous pouvez construire manuellement JSON corps de demande et appelez votre API.

ci-dessous est une façon de construire manuellement JSON corps de la demande -

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