【问题标题】:Spring RestTemplate Beginner: The request sent by the client was syntactically incorrect ()Spring RestTemplate Beginner:客户端发送的请求语法错误()
【发布时间】:2012-04-20 14:07:04
【问题描述】:

我正在尝试访问我可以使用 curl 测试的 Rest 资源 id 长度应为 11 个字符 如果 id 的长度小于 11 例如 '12345' https://somesite.com:7677/something/id/{id} iam 从我的 java 代码和 curl 中得到 404 HTTP 错误,这是预期的

如果 id 的长度等于 11 并且它是无效的 id 然后我从 curl 和 java 得到相同的响应

但是如果我给出 curl 已经存在的有效 id 我得到了正确的 json 响应,但是当我尝试从 restTemplate 访问 Rest 资源时,它显示错误,如下所示

客户端发送的请求语法错误()。并且此请求没有错误日志

从过去 2 天开始,我无法弄清楚,请提供您对此的想法,以便它对我真正有帮助 我的rest模板配置:

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
        <property name="messageConverters">
            <list>
                <ref bean="jsonHttpMessageConverter" />
            </list>
        </property>
    </bean>

我试图访问的代码是

public List<Account> getAccounts(PersonNumber personNumber) {
        logger.warn("Inside getAccounts of TransferAgreement client");

        String url = "https://somesite.com:7677/something/id/12345";
        logger.warn("URL acessing "+personNumber.toString()+"  URL  "+ url);
       String a = restTemplate.getForObject(url, String.class);
       System.out.println(a);
        return null;
    }

【问题讨论】:

  • 至少您应该发布您的 restTemplate 条目的配置,但更好的是还包括您的服务器端资源代码以侦听请求。否则没人能帮你。
  • 您好,我已经更新了问题,但我无法访问服务代码

标签: spring rest resttemplate


【解决方案1】:

假设您使用的是 Eclipse。

为 Spring 启用日志记录

  • 将日志级别设置为调试或跟踪 Spring,请参阅 Logging
  • 运行您的 java 示例
  • 将日志输出添加到您的帖子中

我认为启用日志记录就足够了,我预计 Spring 中会出现异常。但另外,测试一个请求是否被执行:

  • 设置代理,参见how-to-trace-soap-message-in-eclipse-ide - 不管是 REST 还是 SOAP,它是一个 TCP/IP 监视器
  • 运行你的 curl 示例
  • 运行您的 java 示例
  • 将这两个请求添加到您的帖子中

【讨论】:

  • 谢谢你的工作,服务出现错误,这帮助我解决了问题
  • 服务中的错误是什么?为什么它会影响 RestTemplate,而不是 curl?
  • @SpencerKormos 在我的例子中,我的 dto 对象 'Product' (restTemplate.getForObject(uriComponents.toUri(), Product.class);) 没有默认构造函数(只有一个参数化的构造函数)导致此错误。
【解决方案2】:

您能否设置您的开发环境,以便在 Spring 代码中设置调试断点?如果是这样,您可以在 AbstractHttpMessageConverter.write() 的最后一行设置断点。假设您可以在调试器在断点处暂停您的应用程序时评估 Java 表达式,您应该尝试获取 outputMessage.toString() 的结果,将其复制出 IDE,然后将其粘贴到文本编辑器中。这将向您显示 RestTemplate 正在发送的 JSON,因此您可以验证它是否与您通过 curl 发送的内容完全相同。

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多