2015-01-01 6 views
0

У меня есть простой сервер отдыха конечной точки запуска Spring -Android, Xamarin, отдых - как передать объект в запросе

@RestController 
@RequestMapping("/services") 
@Transactional 
public class CustomerSignInService { 

    @Autowired 
    private CustomerDAO customerDao; 

    @RequestMapping("/customer/signin") 
    public Customer customerSignIn(@RequestParam(value = "customer") Customer customer) { 
     //Some Code Here... 
     return customer; 
    } 
} 

Я пытаюсь передать объект клиента из моего Xamarin Android App с помощью этого метода -

public JsonValue send(String url, SmartJsonSerializer obj) 
{ 
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(url)); 
    request.ContentType = "application/json"; 
    request.Method = "POST"; 

    using (var streamWriter = new StreamWriter(request.GetRequestStream())) 
    { 
     streamWriter.Write(obj.toJsonString()); 
    } 

    using (WebResponse response = request.GetResponse()) 
    { 
     using (Stream stream = response.GetResponseStream()) 
     { 
      return JsonObject.Load(stream); 
     } 
    } 
} 

Но я получаю Bad Request Exception (HTTP Error 400) и, очевидно, мой код на стороне сервера не запускается.

SmartJsonSerializer использует Json.NET сериализовать объект клиента в строку -

using System; 
using Newtonsoft.Json; 

namespace Shared 
{ 
    public class SmartJsonSerializer 
    {   
     public string toJson() 
     { 
      return JsonConvert.SerializeObject(this); 
     } 
    } 
} 

Любая помощь приветствуется, Thnx!

ответ

2

Обычно, если вы отправляете сложный объект на api, как это, вы должны записать его в тело запроса. Кажется, вы делаете это на стороне Android.

Я не знаком с весной, но вы ожидаете, что вы ожидаете customer в качестве параметра url. Попробуйте заменить @RequestParam на @RequestBody.

+1

@RequestBody сделал трюк! Я смог немного поиграть с моим юнитом, пока не понял, спасибо! – baraka

1

Я боролся с этим некоторое время, но, видимо, решение может быть найдено на стороне сервера.

Если это помогает, Вы можете посмотреть на этот

@RestController 
@RequestMapping("/services") 
@Transactional 
public class SomeService { 

       @RequestMapping(value = "/user/signin", method = RequestMethod.POST) 
       @ResponseBody 
       public AppUser signIn(@RequestBody AppUser appUser) { 
           appUser.invoke(); 
           return appUser; 
       } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^