老师我不会:) 2023-07-11 00:37 采纳率: 66.7%
浏览 17
已结题

java用feign发请求,参数可以为一个字符串吗?

java用feign发请求,参数可以为一个字符串吗?

我想用feign发送一个post请求,但对方接收的参数类型是一个加密后的字符串,放在body中,请问如何做?我现在的解决方法是用resttemplate用postforobject发字符串,我想修改成用feign来完成

用resttemplate可以做到,代码如下:

@GetMapping("/rest")
    @ApiOperation(value = "登录1", notes = "登录1")
    public R<TokenVO> selectAll1(LoginDTO loginDTO, HttpServletResponse response) throws Exception {
        //加密
        String s = JSON.toJSONString(loginDTO);
        String encrypt = AesUtil.Encrypt(s, sKey);

        //发请求,获取数据
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        HttpEntity<String> request = new HttpEntity<>(encrypt, headers);
        String forObject = restTemplate.postForObject(url,request,String.class);

        //解析数据
        JSONObject jsonObject = JSON.parseObject(forObject);
        String data = jsonObject.getObject("data", String.class);
        String decrypt = AesUtil.Decrypt(data, sKey);
        Map<String, String> jsonMap = JSON.parseObject(decrypt, new TypeReference<HashMap<String, String>>() {});
        TokenVO tokenVO = new TokenVO();
        tokenVO.setToken(jsonMap.get("token"));
        return R.success(tokenVO);
    }

用feign不知道怎么发送参数,因为只有字符串,没参数名称。

feign的代码如下:

@GetMapping
    @ApiOperation(value = "登录", notes = "登录")
    public R selectAll(LoginDTO loginDTO) throws Exception {
        String s = JSON.toJSONString(loginDTO);
        String encrypt = AesUtil.Encrypt(s, sKey);
        String loginData = loginClient.login(encrypt);
        JSONObject jsonObject = JSON.parseObject(loginData);
        String data = jsonObject.getObject("data", String.class);
        return R.success(data);
    }






@Service
@FeignClient(name = "LoginFeignClient",url="${url}")
public interface LoginClient {
    @PostMapping(headers = {"Content-Type=application/json"})
    public String login(@RequestBody String s);

}

请求帮助,谢谢

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-07-11 08:19
    关注

    感觉合适,麻烦采纳下,谢谢
    在使用Feign发送POST请求时,可以将加密后的字符串作为请求体(body)的内容发送给对方。

    示例代码,演示如何使用Feign发送一个带有加密字符串参数的POST请求:

    import feign.Feign;
    import feign.Headers;
    import feign.RequestLine;
    import feign.gson.GsonDecoder;
    import feign.gson.GsonEncoder;
    
    public class FeignExample {
    
        public interface MyApi {
            @RequestLine("POST /endpoint")
            @Headers("Content-Type: application/json")
            void postRequest(String encryptedString);
        }
    
        public static void main(String[] args) {
            MyApi client = Feign.builder()
                    .encoder(new GsonEncoder()) // 使用Gson编码请求体
                    .target(MyApi.class, "http://api.example.com");
    
            String encryptedString = "your-encrypted-string";
            client.postRequest(encryptedString);
        }
    }
    

    在上述示例中,定义了一个名为MyApi的Feign接口,其中有一个postRequest方法用于发送POST求。求体的参数类型为String,即加密后的字符串。

    然后,使用Feign.builder()创建一个Feign客户端实例,并使用GsonEncoder对求体进行编码,将参数转换为JSON格式。最后,通过调用client.postRequest(encryptedString)方法发送POST求,传递加密后的字符串作为参数。

    注意,上述示例仅为示范代码,并未包含加密算法的实现部分。在实际应用中,需要先对字符串进行加密,然后将加密后的字符串作为参数传递给Feign的POST求。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月4日
  • 已采纳回答 7月27日
  • 创建了问题 7月11日

悬赏问题

  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆