2014-10-18 67 views
1

我正在使用Retrofit进行Spring Boot服务的发布请求,但始终称为失败回调方法。这是我的简化代码:将POST请求改装为Spring Boot服务

春季启动服务(控制器):

@RestController 
public class ServController { 

    @Autowired 
    private UserRepository userRepository; 

    @RequestMapping(value = "/user", method = RequestMethod.POST) 
    public Boolean signUpUser(@RequestBody User user) 
    { 

     return true; 
    } 
} 

我的客户端接口:

public interface ChainApi { 

    public static final String USER_PATH = "/user"; 

    @POST(USER_PATH) 
    public void signUpUser(@Body User user, Callback<Boolean> callback); 
} 

异步POST请求:

User user = new User(); 
user.setId(12); 
user.setName(nameEtx.getText().toString()); 
user.setEmail(emailEtx.getText().toString()); 
user.setPassword(passwordEtx.getText().toString()); 

RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint(Constant.URL_LOCALHOST) 
      .build(); 

ChainApi service = restAdapter.create(ChainApi.class); 

service.signUpUser(user, new Callback<Boolean>() { 
    @Override 
    public void success(Boolean aBoolean, Response response) { 

     Log.i(TAG, "Succesfull"); 

    @Override 
    public void failure(RetrofitError error) { 

     Log.i(TAG, "Error " + error.getMessage()); // 400 Bad Request 

    } 
}); 

这是我的用户class(POJO):

@JsonIgnoreProperties(value = { "additionalProperties"}) 
public class User { 

    @JsonProperty("id") 
    private Integer id; 
    @JsonProperty("name") 
    private String name; 
    @JsonProperty("password") 
    private String password; 
    @JsonProperty("email") 
    private String email; 
    @JsonIgnore 
    private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

    // methods 
} 

注意:我在Android中进行开发,并且在从Postman发出手动POST请求时,我得到200 OK。 此外,我得到logcat的消息:400错误的请求

+0

后你得到 – 2014-10-18 14:07:58

+0

更新我的帖子在最后一部分 – kelvincer 2014-10-18 21:11:57

+0

错误听起来像是你的服务器不喜欢从你的要求的东西,也许有东西在里面失踪。看看服务器上的日志,这些可能会指引你朝着正确的方向前进。 – 2014-10-18 23:39:31

回答

2

改造使用GSON作为其默认Converter@JsonIgnoreProperties是Jackson的注释。看着你的RestAdapter,你似乎没有指定一个杰克逊转换器。

Square已经实现了一个JasksonConverter,通过包含依赖关系来使用它。

compile 'com.squareup.retrofit:converter-jackson:X.X.X' 

使用与您的Retrofit版本匹配的版本。

然后

JacksonConverter converter = JacksonConverter(new ObjectMapper()); 
RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint(Constant.URL_LOCALHOST) 
      .setConverter(converter) 
      .build(); 
+0

Miguel您的解决方案无法正常工作。我必须进行以下更改:编译'com.squareup.retrofit:converter-jackson:1.7.0'和JacksonConverter转换器=新的JacksonConverter(新的ObjectMapper()); – kelvincer 2014-10-19 17:29:26

+0

我更新了我的如果你想Retrofit正确地序列化/反序列化你的JSON,如果Jackson是你的主要JSON工具,那么我需要使用JasksonConverter。不幸的是,我不是那种家喻户晓的人与如何配置/使用杰克逊。 – 2014-10-19 17:40:28

+0

好米格尔。谢谢。 – kelvincer 2014-10-19 17:51:26