2014-10-18 27 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