使用 spring RestTemplate 来自 Android 的 PUT 请求

2024-03-12

我必须通过 Restful 服务(.Net)将客户对象从 Android 客户端放入数据库

服务合同

[WebInvoke(Method = "PUT", UriTemplate = "customers/{customerId}", RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
    [OperationContract]
    ReturnValueLong PutCustomer(string customerId, Customer entity);

客户.cs

public class Customer
{

    [DataMember]
    public long SystemId{ get; set; } 

    [DataMember]
    public long CustomerId { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Description { get; set; }
}

在客户端,我使用 Spring for Android 进行通信。

客户端代码:

                    Customer customer = new Customer();
                    customer.setCustomerId(12);
                    customer.setName("sample name");
                    customer.setDescription("sample description");
                    customer.setSystemId(123);

                    List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
                    acceptableMediaTypes.add(MediaType.APPLICATION_XML);

                    // Prepare header
                    HttpHeaders headers = new HttpHeaders();
                    headers.setAccept(acceptableMediaTypes);

                    // Pass the new person and header
                    HttpEntity<Customer> entity = new HttpEntity<Customer>(
                            customer, headers);

                    final String url = "https://192.168.2.119:8009/IAdministratorService/customers/{customerId}";

                    RestTemplate restTemplate = new RestTemplate();
                    restTemplate.getMessageConverters().add(
                            new SimpleXmlHttpConverter());

                    ResponseEntity<NCheckReturnValue> result = restTemplate
                            .exchange(url, HttpMethod.PUT, entity,
                                    NCheckReturnValue.class, 12);

                    return "Return Code:" + result.getBody().getCode()
                            + " Return Value: "
                            + result.getBody().getReturnValue();

客户.java

@Root(name = "Customer")
 @Namespace(reference = "NCheck.Core.Model")
 public class Customer {

@Element
private long SystemId;

@Element
private long CustomerId;

@Element
private String Name;

@Element
private String Description;

// Getters and Setters


}

当我执行代码时,服务器端未正确接收客户对象。 (名称正确,但描述为空)

这个实现有什么问题吗?


如果您能够输入“名称”,则没有理由不输入“描述”。一般来说,如果一个属性被发送为空,那是因为注释没有正确定义。可能的解决方案,

  1. 您可能根本不需要模型类(Customer.java)的注释,因为类名称、属性名称在客户端和服务器端完全匹配。
  2. 仔细检查两端的属性名称。
  3. 使用代理工具,如 charles 或 Burpsuite 来嗅探请求正文的结构,以确保请求具有预期的格式。
  4. 您可以尝试写一些类似的适合您目的的内容。

        /**
             * Put operation where where request and response are both JSON objects.
             * 
             * @param request
             *            the Object to be sent as part of request body
             * @param url
             *            the server url for request
             * @param restTemplate
             *            the rest template
             * @param response
             *            the response type that will be returned by server
             * @return the response object
             * @throws Exception
             */
            public T2 put(T1 request, String url, RestTemplate restTemplate,
                    Class<T2> response) throws Exception {
    
                HttpHeaders headers = new HttpHeaders();
                headers.setAcceptEncoding(ContentCodingType.GZIP);
                // use MediaType relevant to your need
                headers.setContentType(new MediaType(APPLICATION, TYPE_JSON));
    
                HttpEntity<T1> requestEntity = new HttpEntity<T1>(request, headers);
                ResponseEntity<T2> responseEntity;
                try {
                    responseEntity = restTemplate.exchange(url, HttpMethod.PUT,
                            requestEntity, response);
    
                } catch (HttpClientErrorException ex) {
                    throw ex;
                }
    
                catch (HttpServerErrorException e) {
                    throw e;
                }
                return responseEntity.getBody();
            }
    

    祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 spring RestTemplate 来自 Android 的 PUT 请求 的相关文章

随机推荐

  • 如何检测访问您网站的用户所在的国家和城市?

    如何检测访问您网站的用户的原籍国 我在我的网站上使用 Google Analytics 分析 可以看到我的用户来自世界不同地区 但在我的应用程序中 我想根据国家 地区甚至城市提供一些额外的定制 是否可以从浏览器中检测到此信息 这是一个 Py
  • 如何在 Steam WebAPI 中获取应用程序的价格?

    是否可以通过 WebAPI 从 Steam 获取游戏的价格 目前 我们有 API 调用 这意味着我们可以使用JSON http php net manual en book json php for it Appid 57690 海岛大亨
  • Java 日期格式到 JavaScript 日期格式

    我希望能够转换 Java 日期格式字符串 例如日 月 年 07 06 2009 转换为 JavaScript 日期格式字符串 例如dd mm yy 2009 年 7 月 6 日 有没有人以前做过这个 或者知道我在哪里可以找到一些已经做到这一
  • 如何以轻松的方式实现身份验证?

    我正在使用 python 在网络应用程序谷歌应用程序引擎上构建图片日记 用户可以注册并将照片发布到他们的日记中 另外 我正在尝试尽可能地遵循 REST 架构 Web 应用程序的身份验证方案基于以下形式 1 从前端发布用户名 密码2 认证成功
  • 如何向水晶报表中的子报表发送参数

    使用VS 2008 我有两个存储过程 一个用于获取主报告的数据 另一个用于获取子报告的数据 并且两个 SP 使用相同的参数 QuoteID 我已使用 ReportDocument 将参数发送到主报告 但我不知道如何向子报表发送参数 我使用报
  • 无法将序列乘以“float”类型的非 int 错误?

    我正在尝试做一个简单的计算 稍后将在数组上完成 并得到上述错误 无法将序列乘以 float 类型的非 int 8 99 math log 1 0 5 1 2 87 方括号将结果转为 math log 1 0 5 1 2 87 到具有单个元素
  • 如何让 Google Compute Engine 服务器休眠?

    我想使用 GCE 服务器和 VNC 来运行我编写的一些桌面程序 但是 我不想让 GCE 服务器一直运行 以节省金钱 并且我希望保留 VNC 桌面的设置 以节省时间 完成此任务的最简单方法似乎是以某种方式休眠 GCE 实例 有没有办法从脚本或
  • Java 中的包和 C++ 中的库之间有区别吗?

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 有没有办法配置 PuTTY 或其他终端以在下一个输出到 stdout 时闪烁任务栏?

    我专门寻找 PuTTY 的解决方案 但也对其他终端模拟器感兴趣 例如 Gnome Terminal 我的想法是 如果我开始一个tar zxvf为了能够在终端模拟器上设置触发器 将其最小化 然后在下一次输出到 stdout stderr 时
  • 检查 Flask 中 Jinja2 内的变量类型

    我创建的模板文件包含以下内容 if type a 1 b 2 is dict print Oh Yes else print Oh No endif 然后 Jinja2 回应说 TemplateAssertionError no test
  • 是否可以使用Go编译器为其他操作系统分发可执行文件?

    我目前正在Mac OS X上工作 现在我需要构建一个 exe文件 以便Go程序可以在Windows上运行 那么问题来了 如何在 MacOS amd64 下构建 Win X86 的可执行文件 或者不可能这样做吗 如果你不使用 CGo 而使用纯
  • 使用或不使用 C++0x 功能 [重复]

    这个问题在这里已经有答案了 可能的重复 您今天使用 C 0x 的情况如何 https stackoverflow com questions 1754397 how are you using c0x today 我正在与一个团队合作开发一
  • Websocket Java 服务器。不发送消息也不接收消息

    我正在尝试制作一个 Java WebSocket 服务器 没有什么真正复杂的 只是一个丑陋的小服务器 用于使用标准定义的 api 从浏览器尝试 websocket 我一直在阅读协议的规范 它非常简单 我已经握手了 显然它正在起作用 我用Ja
  • 附加分配给特定分区的 KafaConsumer

    如何将 python 消费者脚本附加到特定的 kafka 分区 在运行消费者脚本的两个实例 如下所示 时 每个实例都会随机选择一个分区 然后按预期消费 打印该特定分区的所有消息 但由于我需要将这些消息输出到磁盘上名为本地文件的分区 因此将脚
  • 用于存储数百万张图像的文件夹结构?

    我正在构建一个网站 该网站正在查看轻松上传的数百万张照片 每个上传的图像都有 3 个缩略图 我需要找到存储所有这些图像的最佳方法 我搜索并找到了存储为哈希的图像示例 例如 如果我上传 coolparty jpg 我的脚本会将其转换为 Md5
  • 数据仓库模型:集线器有什么用?

    我刚刚读到数据仓库建模 https en wikipedia org wiki Data vault modeling据我了解 集线器仅包含密钥 和记录源 所以我想知道为什么我应该创建这些中心表 只是为了存储记录源 仅拥有卫星和链接还不够吗
  • NSValueTranformer 用于加密数据

    我想在 NSValueTransformer 的帮助下加密一些核心数据列 我的想法是 我使用数据类型可转换并为我的数据类型定义一些转换器 在转换方法中 我想加密 解密该值 我定义了一个实际上什么都不做的变压器 加密的东西目前还没有实现 im
  • ReportViewer 到 div/image/object 内的 PDF

    这几天一直在寻找 但没能找到我要找的东西 希望我没有错过 我有一个 ASP NET 4 0 站点 我正在将其放在一起以检索工资信息 目前我正在使用reportviewer 但由于跨浏览器支持 它不能100 工作 我已经将其设置为自动将 RV
  • Symfony2 形成没有实体的验证器组

    我正在使用 Symfony2 表单组件来构建和验证表单 现在我需要根据单个字段值设置验证器组 不幸的是 似乎每个示例都基于实体 由于多种原因 我没有使用实体 例子 如果任务为空 则应删除所有约束验证器 但如果不是 则应使用默认的验证器集 或
  • 使用 spring RestTemplate 来自 Android 的 PUT 请求

    我必须通过 Restful 服务 Net 将客户对象从 Android 客户端放入数据库 服务合同 WebInvoke Method PUT UriTemplate customers customerId RequestFormat We