2013-11-28 41 views
0

我正在使用Spring 4.0 REST API创建Web服务Api,我有以下Android HttpClient代码,但我得到服务器的404错误,我需要最佳的Spring控制器代码,这将与我的以下Android HttpClientStringEntity的Spring REST控制器

其中有一个方法如下
void call() { 
     HttpClient client = new DefaultHttpClient(); 
     HttpPost post = new HttpPost("http://192.168.0.15:8080/locate/register"); 
     post.setHeader("Content-type", "application/json"); 
     post.setHeader("Accept", "application/json"); 
     JSONObject obj = new JSONObject(); 
     obj.put("userId", "1111"); 
     obj.put("mobileNumber", "1111111"); 
      obj.put("userName", "abc"); 
      obj.put("password", "abc"); 
      obj.put("email", "[email protected]"); 
      obj.put("meiNumber", "876535354"); 
      post.setEntity(new StringEntity(obj.toString(), "UTF-8")); 
     HttpResponse response = client.execute(post); 
    } 

目前我已经写了春天控制器,我想回到同一对象或任何在JSON而已,也解释了为什么下面的方法是不符合我的Android客户端代码工作..

@RequestMapping(method = RequestMethod.POST, value = "/register", headers = "Accept=application/json") 
    public @ResponseBody UserRegistration registerUser(@RequestBody UserRegistration user) { 
       // my business logic 
       return user; 
    } 

我是pastin摹放在userRegistration模型这里

public class UserRegistration implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    private long userId; 
    private String mobileNumber; 
    private String userName; 
    private String password; 
    private String email; 
    private String imeiNumber; 

    private Date registrationDate; 


    public long getUserId() { 
     return userId; 
    } 

    public void setUserId(long userId) { 
     this.userId = userId; 
    } 


    public String getMobileNumber() { 
     return mobileNumber; 
    } 

    public void setMobileNumber(String mobileNumber) { 
     this.mobileNumber = mobileNumber; 
    } 


    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 


    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 


    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 


    public String getImeiNumber() { 
     return imeiNumber; 
    } 

    public void setImeiNumber(String imeiNumber) { 
     this.imeiNumber = imeiNumber; 
    } 

    public Date getRegistrationDate() { 
     return registrationDate; 
    } 

    public void setRegistrationDate(Date registrationDate) { 
     this.registrationDate = registrationDate; 
    } 
} 

请帮我解决这个..

+0

我不知道你可以从android调用“http:// localhost:8080”...尝试在“http://jelastic.com/”上放置web服务(他们有免费的计划)。请添加logcat。 –

+0

@Haris是在Android客户端我使用我的网络我的IP,那么我也会得到相同的错误 – Ani

回答

0

当您使用在Android上StringEntity,它被附加到名称为“数据”的参数。所以,你需要的是这样的:

@RequestMapping(method = RequestMethod.POST, value = "/register", headers = "Accept=application/json") 
    public @ResponseBody UserRegistration registerUser(@RequestParam(value = "data") UserRegistration user) { 
       // my business logic 
       return user; 
    } 

您可能需要添加一个转换器,像这样:

public class StringToUserRegistrationConverter implements Converter<String, UserRegistration> { 
    Logger log = Logger.getLogger("StringToUserRegistrationConverter"); 

    @Override 
    public UserRegistration convert(String source) { 
     ObjectMapper objectMapper = new ObjectMapper(); 
     try { 
      return objectMapper.readValue(source, UserRegistration.class); 
     } catch (IOException e) { 
      log.log(Level.SEVERE, "Couldn't convert", e); 
     } 
     return null; 
    } 
} 

并注册该转换器:

<bean id="conversionService" 
     class="org.springframework.context.support.ConversionServiceFactoryBean"> 
    <property name="converters"> 
     <set> 
      <bean class="com.example.spring.converter.StringToUserRegistrationConverter"/> 
     </set> 
    </property> 
    </bean> 
相关问题