2010-09-28 38 views
11

Tôi đang làm việc trên Ứng dụng Android đầu tiên của mình. Bây giờ wat tôi muốn làm là để thực hiện một yêu cầu POST cho một dịch vụ restfull chạy trên máy chủ và tôi muốn BODY của yêu cầu này là một chuỗi JSon.Làm cách nào để gửi JSon dưới dạng BODY Trong yêu cầu POST tới máy chủ từ ứng dụng Android?

Tôi đang sử dụng GSon để tạo JSon để gửi tới máy chủ. Mã tôi đang sử dụng để thực hiện yêu cầu POST sau:

HttpPost requisicao = new HttpPost(); 
requisicao.setURI(new URI(uri)); 
requisicao.setHeader("User-Agent", sUserAgent); 
requisicao.setHeader("Content-type", "application/json"); 
HttpResponse resposta = null; 
//I can see the json correctly print on log with the following entry. 
Log.d(TAG, "JSon String to send as body in this request ==>> " + jsonString); 
//than I try to send JSon using setEntityMethod 
StringEntity sEntity = new StringEntity(jsonString, "UTF-8"); 
requisicao.setEntity(sEntity); 

resposta = httpClient.execute(requisicao); 
resultado = HttpProxy.leRespostaServidor(resposta); 

Mã phản hồi là 400 BAD REQUEST và từ nhật ký máy chủ Tôi có thể đọc thông tin. nơi nó nói cơ thể không được gửi một cách chính xác:

13:48:22,524 ERROR [SynchronousDispatcher] Failed executing POST /peso/cadastrar/[email protected] 
org.jboss.resteasy.spi.BadRequestException: Could not find message body reader for type: class java.io.Reader of content type: application/json 

Mã cho phía máy chủ là một đơn giản Seam Nghỉ ngơi Dịch vụ:

@POST 
@Path("/cadastrar/{userEmail}") 
@Consumes(MediaType.APPLICATION_JSON) 
public String cadastraPeso(@PathParam("userEmail") String email, Reader jsonString) 
{ 
    LineNumberReader lnr = new LineNumberReader(jsonString); 
    try { 
    String json = lnr.readLine(); 
    if(json != null) 
    { 
    log.debug("String json recebida do device ==>> " + json); 
    } 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    return "OK - o e-mail processado foi ==>> " + email; 
} 

Điều gì có thể xảy ra với mã khách hàng Android? Tôi đã nghiên cứu trên web và không tìm thấy bất kỳ thông tin thực sự hữu ích nào về chủ đề này.

[] s

Trả lời

10

Xin lỗi, bạn đã chỉ ra rằng lỗi nằm trong dịch vụ Rest. Tôi có thay đổi nó để nhận được một chuỗi thay vì đối tượng Reader và bây giờ nó hoạt động như mong đợi, mã Nghỉ ngơi ở phía máy chủ bây giờ là:

@POST 
@Path("/cadastrar/{userEmail}") 
@Consumes(MediaType.APPLICATION_JSON) 
public String cadastraPeso(@PathParam("userEmail") String email, String jsonString) 
{ 
     String json = jsonString; 
     if(json != null) 
     { 
      log.debug("String json recebida do device ==>> " + json); 
     } 
     return "OK - o e-mail processado foi ==>> " + email; 
} 

Và chuỗi JSON được nhận một cách chính xác trong phía máy chủ.

Vì vậy, mã Android ở trên hoạt động như mong đợi.

liên quan.

+3

Tốt Marcos. Hai ngày kể từ bây giờ, đánh dấu câu trả lời của riêng bạn như được chấp nhận –

+0

Hi Arthur, tôi phải nói với bạn tôi vẫn còn một chút bị mất bằng cách sử dụng tràn ngăn xếp. Là một starter, nó có vẻ quá nhiều thông tin cho tôi, ý tôi là, tất cả các mecanics về điểm này, bình luận, bài viết, như một ấn tượng đầu tiên có chút nhầm lẫn với các diễn đàn này, nhưng tôi đã tìm thấy thông tin tuyệt vời bằng cách sử dụng nó. nhanh chóng. –

+0

Tôi rất vui vì bạn thấy trang web này hữu ích, nhưng vui lòng chấp nhận câu trả lời của riêng bạn làm câu trả lời được chấp nhận bằng cách nhấp vào biểu tượng bên dưới mũi tên xuống. Nó sẽ được đánh dấu là màu xanh lá cây khi con chuột của bạn vượt qua nó. –

Các vấn đề liên quan