将Post请求中的String参数和对象传递给RESTful服务

时间:2016-03-17 23:34:57

标签: java rest

我有一个客户端方法:

@SuppressWarnings("unchecked")
public static void main(String[] args){
    mediaTracker = new MediaTracker(frame);

    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    frame.setSize(dim.width, dim.height);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

    setFullScreen();

    RSACipher rsaCipher = new RSACipher();
    // client side code
    RSAKeyPair keyPair;
    try {
        keyPair = new RSAKeyPair(2048);

        String servletURL = "http://localhost:8080/AesRsaEncryptionServiceRest/aesrsarest/doc/encryptionservice?pkey=pkey&skey=skey";

        Gson gson = new GsonBuilder().create();

        URL servlet = null;
        try {

            servlet = new URL(servletURL);
            System.out.println("Sending request to " + servletURL);
            HttpURLConnection servletConnection = (HttpURLConnection) servlet.openConnection();
            servletConnection.setRequestMethod("POST");
            servletConnection.setDoOutput(true);
            servletConnection.setDoInput(true);


            //send the keys to the server
            ObjectOutputStream objOut = new ObjectOutputStream(servletConnection.getOutputStream());

            objOut.writeObject(keyPair.getPublicKey());

            objOut.flush();
            objOut.close();

在第ObjectOutputStream objout行中,我传递了加密所需的公钥。我想知道,如果可以将带参数的String参数传递给post方法吗?

我尝试创建一个新对象,然后我将String参数和公钥对象传递给对象流,但它没有用。我需要String参数来传递要使用RESTful服务加密的文件名

1 个答案:

答案 0 :(得分:1)

假设它是一个json请求,我们可以使用任何json解析器(即Gson,Jackson等)将对象转换为json并将其POST到url。下面是使用Jackson传递Map(对象)的示例。

OutputStreamWriter out = new   OutputStreamWriter(servletConnection.getOutputStream());
ObjectMapper mapper = new ObjectMapper(); //Jackson Object mapper
Map<String, Object> data = new HashMap<String, Object>();
data.put("key", "value");
out.write(mapper.writeValueAsString(data));

类似地,我们可以将任何对象转换为json并将其发送到有效载荷中。