【问题标题】:Retrofit POST request to Spring Boot service改造 Spring Boot 服务的 POST 请求
【发布时间】:2014-12-13 17:03:41
【问题描述】:

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

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

    }
});

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

【问题讨论】:

  • 发布您遇到的错误
  • 在最后部分更新了我的帖子
  • 听起来您的服务器不喜欢您的请求中的某些内容,也许其中缺少某些内容。查看服务器上的日志,这些可能会为您指明正确的方向。
  • 谢谢米格尔,我解决了这个问题。我能够获得完整的服务器响应,这一部分:“异常”:“org.springframework.http.converter.HttpMessageNotReadableException”,“消息”:“无法读取 JSON:无法识别的字段 \”add​​itionalProperties\“。现在我的问题是如果改造有注释 @JsonIgnoreProperties(value = { "additionalProperties"}) 和 @JsonIgnore ,为什么要使用这个字段。
  • 您应该使用这些详细信息更新您的问题。我已经添加了一个答案,如果有帮助,请告诉我。

标签: java post spring-boot retrofit


【解决方案1】:

Retrofit 使用 GSON 作为其默认 Converter@JsonIgnoreProperties 是 Jackson 的注释。查看您的 RestAdapter,您似乎没有指定 Jackson 转换器。

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();

【讨论】:

  • Miguel 你的解决方案不起作用。我必须做出这些改变: compile 'com.squareup.retrofit:converter-jackson:1.7.0' AND JacksonConverter converter = new JacksonConverter(new ObjectMapper()) ;
  • 我已根据您的更改更新了我的答案。我为错误道歉。据我所知,如果 Jackson 是您的主要 JSON 工具,如果您希望 Retrofit 正确序列化/反序列化您的 JSON,您需要使用 JasksonConverter。不幸的是,我不太熟悉如何配置/使用 Jackson。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 2018-07-18
  • 2023-03-23
  • 2021-03-06
  • 2015-11-06
  • 2021-07-15
  • 2017-08-10
相关资源
最近更新 更多