Android Retrofit客户端+ Spring Boot服务POST“400”响应

时间:2018-02-27 13:28:04

标签: android json spring spring-boot retrofit

我正在使用Spring Boot API / service(Java)编写Android(Kotlin)应用程序。 我有Android的Retrofit客户端和服务器上的Restful Spring Controller。

问题:当我使用下面提供的客户端 - 服务器JSON可序列化模型发出POST请求时,服务给出“400”(错误请求)。 Currenlty我没有机会在服务器端记录Spring Boot的web / debug输出, 因此,我唯一可以依赖和分享的是客户日志和实际项目代码。

这是Retrofit响应对象的日志,没什么特别的:

Response{protocol=http/1.1, code=400, message=, url=https://my_url}

这是Android客户端的型号代码(两个模型中的一些具有相同名称的字段在两个模型中相互重命名以保持简单):

class ClientPrivateUserTO(val serviceId: Int?,
                             val propOne: String?,
                             val propTwo: String,
                             val propThree: String,
                             val propFour: String?,
                             val ownAIds: Iterable<Int>,
                             val ownBIds: Iterable<Int>) : Serializable

以下是Retrofit客户对请求的乐趣:

@POST("/add_update")
fun addOrUpdate(@Body userTo: ClientPrivateUserTO): Call<UserTransactionResponse>

这是Spring服务模型类:

public class PrivateAppUserTO implements Serializable {

    private Integer serviceId;

    private String propOne;

    private String propTwo;

    private String propThree;

    private String propFour;

    private Iterable<Integer> ownAIds;

    private Iterable<Integer> ownBIds;

    public PrivateAppUserTO() {}

    public PrivateAppUserTO(@JsonProperty("serviceId") Integer serviceId, 
                            @JsonProperty("propOne") String propOne, 
                            @JsonProperty("propTwo") String propTwo, 
                            @JsonProperty("propThree") String propThree, 
                            @JsonProperty("propFour") String propFour,
                            @JsonProperty("ownAIds") Iterable<Integer> ownAIds, 
                            @JsonProperty("ownBIds") Iterable<Integer> ownBIds) {
        this.serviceId = serviceId;
        this.propOne = propOne;
        this.propTwo = propTwo;
        this.propThree = propThree;
        this.propFour = propFour;
        this.ownAIds = ownAIds;
        this.ownBIds = ownBIds;
    }

    public Integer getServiceId() {
        return serviceId;
    }

    public void setServiceId(Integer serviceId) {
        this.serviceId = serviceId;
    }

    public String getPropOne() {
        return propOne;
    }

    public void setPropOne(String propOne) {
        this.propOne = propOne;
    }

    public String getPropTwo() {
        return propTwo;
    }

    public void setPropTwo(String propTwo) {
        this.propTwo = propTwo;
    }

    public String getPropThree() {
        return propThree;
    }

    public void setPropThree(String propThree) {
        this.propThree = propThree;
    }

    public String getPropFour() {
        return propFour;
    }

    public void setPropFour(String propFour) {
        this.propFour = propFour;
    }

    public Iterable<Integer> getOwnAIds() {
        return ownAIds;
    }

    public void setOwnAIds(Iterable<Integer> ownAIds) {
        this.ownAIds = ownAIds;
    }

    public Iterable<Integer> getOwnBIds() {
        return ownBIds;
    }

    public void setOwnBIds(Iterable<Integer> ownBIds) {
        this.ownBIds = ownBIds;
    }
}

这是服务控制器代码:

@PostMapping(path="/add_update")
public @ResponseBody TransactionalResponseUserTO createOrUpdate(@RequestBody PrivateAppUserTO userTo) {
    if (userTo.getServiceId() == null) return userService.createFromClientServerUser(userTo);
    else return userService.updateFromClientServerUser(userTo);
}

上面的代码中是否有明显的错误?

可以解包Iterable&lt; *&gt;在模型中是原因吗?

在此堆栈上编写客户端 - 服务器代码时是否应该注意一些瓶颈?

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

好吧,似乎原因是解开Iterable - 现在当我切换到JSON对象中包含的List时,所有工作都没有问题。