当前位置: 首页 > 知识库问答 >
问题:

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

崔绍辉
2023-03-14

我正在用Spring Boot API/服务(Java)编写Android (Kotlin)应用程序。我在服务器上安装了Android客户端和restful Spring控制器。

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

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

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

上面的代码是不是做了明显错误的事情?

可以展开迭代吗

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

事先非常感谢。

共有1个答案

盛跃
2023-03-14

好了,看起来原因是展开的< code > Iterable ——现在,当我切换到JSON对象中的< code>List时,所有工作都没有问题。

 类似资料:
  • 下面是发出请求的客户端函数,部分由于状态400而被阻止: 下面是一些来自控制台的Chrome材料:

  • 我已经在Go中编写了一个简单的客户机/服务器,它将通过TLS执行HTTP GET,但我也试图使它能够通过TLS执行HTTP POST。 我现在也没有什么东西可以在服务器端处理这个帖子,但我只想让它把它打印到屏幕上,这样当我运行客户端时,我就会看到服务器打印。 我应该如何修复我的客户端代码来做一个适当的帖子?而相应的服务器代码应该是什么样子才能接受POST呢?任何帮助都将非常感谢,我有困难找到HTT

  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • 我有一个react本机应用程序,它使用与。NET Core2.1通信的signalR。 套接字连接没有任何错误。一切都很好。但是服务器不能响应客户端的ping消息,并返回504给客户端。当返回504时,客户端的连接关闭。在hubconnection.onclose()处理。然后客户端需要重新连接。 proxy_read_timeout可以设置为高毫秒。但很乱。 所以我不能在客户机上有效地使用kee

  • 我正在尝试使用HTTP请求/响应用Java编写一个简单的客户机-服务器应用程序。我想客户端是一个桌面程序发送(张贴)请求到服务器。该服务器是一个网页,将被托管在Apache Tomcat服务器上。服务器必须能够读取信息并将其显示在浏览器上,并且必须能够用状态代码200响应客户端。我正在使用eclipse和Apache tomcat服务器。到目前为止,我已经尝试了各种资源,但我所能找到的是一个可以从

  • 问题内容: 我有stfw,但是找不到在Java中创建Web服务客户端的简单/独立方法。 有人在此链接/示例吗? 问题答案: 使用Axis2怎么样? 只需按照快速入门指南进行操作,就可以轻松应对。 这是另一个更具描述性的指南