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

如何使用camel调用内容类型为X-www-urlencoded的POST api

屠盛
2023-03-14

我尝试将处理器写入如下

    package com.example.demo;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Stream;

import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;

import com.fasterxml.jackson.databind.ObjectMapper;

public class TokenProcessor implements Processor {

    @Override
    public void process(Exchange exchange) throws Exception {
        // TODO Auto-generated method stub
        
        exchange.
        System.out.println(exchange.getIn().getBody());
        Message out = exchange.getOut();
            
        Map<String,Object> map=new HashMap<String,Object>();
        map.put(Exchange.HTTP_METHOD,"POST" );
        map.put(Exchange.CONTENT_TYPE,"application/x-www-form-urlencoded" );
    
        TokenInput tokeninput=exchange.getIn().getBody(TokenInput.class);
        System.out.println("Tokeninput="+tokeninput);
//      map.put("client_id",tokeninput.getClient_id());
//      map.put("scope",tokeninput.getScope());
//      map.put("code",tokeninput.getCode());
//      map.put("redirect_uri",tokeninput.getRedirect_uri());
//      map.put("grant_type",tokeninput.getGrant_type());
//      map.put("client_secret",tokeninput.getClient_secret());
        ObjectMapper obj=new ObjectMapper();
        String jsonStr=obj.writeValueAsString(tokeninput);
        //InputStream convertValue = obj.convertValue(tokeninput, Byte.class);
        out.setHeaders(map);
        //String encode = URLEncoder.encode(tokeninput.toString(),"utf-8");
        out.setBody(exchange.getIn().getBody());
    }
}

Gettring错误

NotypeConversionAvailableException:没有类型转换器可用于将类型:com.example.demo.TokenInput转换为所需类型:java.io.InputStream,其值为com.example.demo.TokenInput@ea2c54c at org.apache.camel.impl.converterregistry.mandatoryConvertto(BasetypeConverterRegistry.java:181)~[camel-core-2.12.0.jar:2.12.0]at:2.12.0]在org.apache.camel.processor.convertBodyProcessor.process(convertBodyProcessor.java:78)~[camel-core-2.12.0.jar:2.12.0]

共有1个答案

梁丘成和
2023-03-14

我在camel应用程序中广泛使用它,如下所示。

    .removeHeaders("*")
            .setHeader(Exchange.HTTP_METHOD, constant("POST"))
            .setHeader(Exchange.CONTENT_TYPE, constant("application/x-www-form-urlencoded"))
            .setBody(simple("grant_type=refresh&client_id=1233232&client_secret=mysecret"))
            .to("http://google.com");
 类似资料:
  • 我有一个api要求在标题中发送以下参数- 内容类型-应用程序/x-www. form-urlencoded AuthKey-(会话令牌) 以及正文中的以下参数(表单日,即键值对) storeId-1 类型-产品 类别ID-324 但是每当我点击这个api,我总是得到401(未授权)错误。我已经尝试使用MultipartRequest正文和formBody,我知道这与正文无关(它的头,我需要发送内容

  • 当我将RequestHeader设置为Content-type=“application/json”时,它将变为“application/x-www-form-urlencoded”,并且我得到了不支持的媒体类型错误(无效的内容类型:application/x-www form-urlencoded) 我的RestController代码: 我的javascript函数:

  • 我试图访问这个REST API,它接受三个参数:,,我在AngularJS中这样做: 但我总是这样: 对象{data:“{”result:“false”},状态:200,配置:Object,状态文本:“OK”,标题:function} 或者 {"data":"{\"结果\":\"false\"}","状态": 200,"配置":{"方法":"POST","transformRequest":[nu

  • 我们的服务器在POST调用中需要“application/x-www-form-urlencoded”内容类型,但当我将标题设置为“application/x-www-form-urlencoded”时,它返回400个错误请求。以下是我使用HttpPost的代码: 这是我使用HttpsUrlConnection的代码: 这是Charles Proxy的请求。您可以看到,尽管我在这两种情况下都将内容

  • 我需要通过内容类型为的发布一个对象(例如,不是)。当我试着这么做的时候... ...我得到以下错误: RestClientException:无法写入请求:找不到适合请求类型[com.whatever.myRequestPayload]和内容类型[application/x-www-form-urlencoded]的HttpMessageConverter 以下是我在中看到的内容: 为什么我不想提

  • 当内容类型为application/json时,@RequestBody可以读取请求主体并将其反序列化为对象,但内容类型为application/x-www-form-urlencoded,spring mvc无法支持带有@RequestBody注释的此内容类型。 在我的项目中,我遇到了这个问题,我想同时支持他们两个,但我不想失去@quiestBody的便利性。 有没有另一种方法来支持这两种内容类