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

问题描述 投票:0回答:1

我正在使用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 <*>吗?

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

提前谢谢了。

android json spring spring-boot retrofit
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.