将POST请求改为Spring Boot服务

时间:2014-10-18 04:56:32

标签: java post spring-boot retrofit

我正在使用Retrofit对Spring Boot服务发布请求,但总是称为失败回调方法。这是我的简化代码:

Spring Boot服务(Controller):

@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

    }
});

这是我的用户类(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 Bad Request

1 个答案:

答案 0 :(得分:2)

Retrofit使用GSON作为其默认Converter@JsonIgnoreProperties是杰克逊的注释。看看你的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();