Spring RestTemplate初学者:客户端发送的请求在语法上是不正确的()

时间:2012-04-20 14:07:04

标签: spring rest resttemplate

我正在尝试访问我能够使用curl测试的Rest资源 id长度应为11个字符 如果id的长度小于11,例如'12345' https://somesite.com:7677/something/id/ {id}我从我的java代码获得404 HTTP错误并且卷曲是预期的

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

但是如果我给出curl提供的有效id 我正在获得正确的json响应,但是当我试图从restTemplate访问Rest资源时,它显示错误,如下所示

  

客户端发送的请求在语法上是不正确的()。并且此请求没有错误日志

我无法在过去2天内弄明白,请提供您对此的想法,以便它对我来说真的很有帮助 我的休息模板配置:

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

iam尝试访问的代码是

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

2 个答案:

答案 0 :(得分:4)

假设您正在使用Eclipse。

启用Spring的日志记录

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

我认为启用日志记录就足够了,我希望在Spring中有一个例外。但另外,测试是否执行了请求:

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

答案 1 :(得分:0)

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