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

如何通过Apache camel HTTP组件映射REST请求的响应

徐奇逸
2023-03-14

我已经用Apache camel XML模式实现了以下路由。

<restConfiguration component="servlet" bindingMode="json" contextPath="/abc-esb/rest" port="8181"> 
    <dataFormatProperty key="prettyPrint" value="true" />
    <dataFormatProperty key="json.in.disableFeatures" value="FAIL_ON_EMPTY_BEANS,FAIL_ON_UNKNOWN_PROPERTIES" />
</restConfiguration>

<rest path="/service-http" consumes="application/json" produces="application/json">
    <put type="com.abc.abcd.esb.models.UserServiceMapping" uri="/create">
        <route>
            <setHeader headerName="Authorization">
                <simple>Basic YWRtaW46YWRtaW4=</simple>
            </setHeader>
            <setHeader headerName="CamelHttpMethod">
                <constant>POST</constant>
            </setHeader>
            <setBody>
                <simple>
                    {"SystemUserDetails":{"userName":"${body.objectDetails.userName}",
                    "password": "${body.objectDetails.password}"}}
                </simple>
            </setBody>
            <to uri="http://192.168.1.20:8081/abcd/services/UserServiceRest/V1.0/users/create?bridgeEndpoint=true" />
        </route>
    </put>
</rest>

功能按预期发生。但是camel返回HTTP 500,并提到以下错误。

    private String serviceName;
    private String serviceMethod;
    private String mappedServiceObject;
    private SystemUserDetails objectDetails;
    // private StatusDetails statusDetails;

    public String getMappedServiceObject() {
        return mappedServiceObject;
    }

    public void setMappedServiceObject(String mappedServiceObject) {
        this.mappedServiceObject = mappedServiceObject;
    }

    public String getServiceName() {
        return serviceName;
    }

    public void setServiceName(String serviceName) {
        this.serviceName = serviceName;
    }

    public String getServiceMethod() {
        return serviceMethod;
    }

    public void setServiceMethod(String serviceMethod) {
        this.serviceMethod = serviceMethod;
    }

    public SystemUserDetails getObjectDetails() {
        return objectDetails;
    }

    public void setObjectDetails(SystemUserDetails objectDetails) {
        this.objectDetails = objectDetails;
    }

    /*
     * public StatusDetails getStatusDetails() { return statusDetails; }
     * 
     * public void setStatusDetails(StatusDetails statusDetails) {
     * this.statusDetails = statusDetails; }
     */

场景的请求响应流

共有1个答案

张炳
2023-03-14

到目前为止,我还找不到这个问题的确切原因,但是我可以通过在发出初始REST请求的外部REST客户机中设置accept:application/xml而不是accept:application/json来绕过这个问题。(另一端的REST服务endpoint配置为同时生成json和xml)

 类似资料:
  • 我试图通过PHP SDK(沙箱环境)创建并执行一个与PayPal REST API的支付,如下所示。支付创建()工作良好,但支付执行()返回。JSON请求是由SDK创建的,那么会有什么问题呢?提前道谢。

  • 问题内容: 我没有找到解决问题的示例,因此想向你寻求帮助。我不能简单地使用JSON中的RestTemplate对象发送POST请求 每当我得到: 我以这种方式使用RestTemplate: 我怎么了 问题答案: 这项技术对我有用: 我希望这有帮助

  • 嗨,我正在通过axios尝试reactjs POST请求,但出现错误,我查看了所有文档,但错误未得到解决。 这是我的错误: 未捕获(promise中)错误:请求在XMLHttpRequest的结算(eval at(bundle.js:4621),:15:15)处的createError(eval at(bundle.js:4615),:18:12)处失败,状态代码为400。手工装载(在(捆js:4

  • 我有一个需要过滤的对象。 我需要输入“数据”,只有“isEnabled”为真的值的ID。

  • Web 容器需要本章描述的映射技术去映射客户端请求到 Servlet(该规范2.5以前的版本,使用这些映射技术是作为一个建议而不是要求,允许servlet 容器各有其不同的策略用于映射客户端请求到 servlet)。