【问题标题】:passing java object into a url via curl通过 curl 将 java 对象传递到 url
【发布时间】:2020-12-15 22:44:38
【问题描述】:

我需要更新一个通过 curl 传入一些参数的工作的 shell 脚本,像这样

curl -X POST -H 'Content-Type: application/json' "http://myurl?param1=test1&param2=test2&param3=test3"

一切正常,但问题是我的 API 需要第四个参数,而不仅仅是一个字符串,它是我们 API 中定义的 Java 对象。有什么我可以用shell脚本来管理的吗?感谢任何帮助。我对 Java 还很陌生,所以我有点挣扎。

【问题讨论】:

  • UNIX 命令的参数只能是 C 字符串(也就是说,以 NUL 结尾的字符串),无论您通过什么语言调用它们。 URL 也是字符串。
  • ...所以这个 Java 对象需要被序列化为字符串才能被传递。您正在调用的 API 的文档应该描述您需要的任何类型的序列化(无论是对 JSON 的某种编组,还是传递在服务器端用于查找对象的标识符,或者可能是其他任何东西) .
  • 因此,首先要开始阅读 API 的文档并弄清楚它需要什么;只有在您做出决定后,您才能提出我们需要帮助您的具体问题。 (如果 API 是您自己编写的,那么您的工作就是反序列化返回到对象中的数据,或者在商店中查找该对象,或者采取任何其他适当的操作;在做出设计决策时要注意并非所有序列化格式都旨在安全处理不受信任的数据)。
  • 此 API 是否有任何预先存在的客户端?一个好的起点是看看他们做了什么。例如,如果有一个基于浏览器的客户端,请使用浏览器的内置调试器查看它向服务器发送的参数,您将能够看到它如何以字符串形式表示手头的数据。跨度>

标签: java shell curl


【解决方案1】:

两种可能的选择,等等。


Base64 + byte[]

  1. 发送

    • 序列化Object 转换为byte[]

    • 编码base64

      ByteArrayOutputStream bos= new ByteArrayOutputStream();
      ObjectOutputStream obs = new ObjectOutputStream(bos);
      obs.writeObject(yourJavaObject);
      obs.flush();
      curlStringObj= new String(Base64.encode(bos.toByteArray()));       
      

curlStringObj 字符串应该是您在 curl 调用中发送的字符串。

  1. 接收

    • 解码来自base64

    • 反序列化 byte[]Object

      byte b[] = Base64.decode(curlStringObj.getBytes()); 
      ByteArrayInputStream bis= new ByteArrayInputStream(b);
      ObjectInputStream ois = new ObjectInputStream(bis);
      YourJavaObject receivedJavaObject= (YourJavaObject) ois.readObject();
      

GSON (Json)

另一种选择是将其序列化为 JSON,例如,using the GSON lib。可能是最简单的方法之一。

  1. 发送

     Gson gson = new Gson();
     String curlStringObj = gson.toJson(yourJavaObject);
    
  2. 接收

     Gson gson = new Gson(); 
     YourJavaObject jObject = gson.fromJson(curlStringObj ,YourJavaObject.class);
    

不管怎样,只是以这些为例。首先检查 API 的规范并根据它转换对象。希望能有所帮助。

【讨论】:

    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    相关资源
    最近更新 更多