简体   繁体   English

用于StringEntity的Spring REST控制器

[英]Spring REST Controller for StringEntity

I am creating Web Service using Spring 4.0 REST Api , I am having following Android HttpClient code but I am getting 404 error from server , I need best Spring controller code which will work with my following Android HttpClient 我正在使用Spring 4.0 REST Api创建Web服务,我在遵循Android HttpClient代码,但是从服务器收到404错误,我需要最好的Spring控制器代码,它将与我的以下Android HttpClient一起使用

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", "abc@a.com");
            obj.put("meiNumber", "876535354");
            post.setEntity(new StringEntity(obj.toString(), "UTF-8"));
        HttpResponse response = client.execute(post);
    }

presently I have written spring controller which has one method as follows , I want to return same object or anything which is in JSON only, also explain why following method is not working with my android client code .. 目前,我已经编写了spring控制器,它具有以下一种方法,我想返回相同的对象或仅包含JSON的任何内容,还解释了为什么以下方法不适用于我的android客户端代码..

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

I am pasting UserRegistration model here 我在这里粘贴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;
    }
}

please help me to resolve this .. 请帮助我解决这个问题..

When you use a StringEntity in Android, it gets appended to the parameters with name "data". 在Android中使用StringEntity时,它会附加到名称为“ data”的参数后面。 So what you need is something like: 所以您需要的是:

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

You might need to add a Converter like so: 您可能需要添加一个Converter,如下所示:

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

and register the converter: 并注册转换器:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM