springmvc 使用 @RequestBody接收参数

本文介绍了如何使用Java实现GET和POST请求,并针对不同Content-Type类型的数据格式进行参数解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Content-Type: text/plain,application/json;

1、如果发送过来的Content-Type是text/plain类型的话,
@RequestBody要用到String的参数类型接收

2、如果是application/json类型的话,就需要使用我们在springmvc中设置的json的默认格式的类型数据去进行接收,一般是Map类型。

附上测试代码:

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import com.google.gson.Gson;

/**
* @author  zhaoyutao
* @version 2015年12月4日 下午3:45:11
* 用来模拟接口调用,支持get和post
*/
public class App {

    HttpClient client = HttpClientBuilder.create().build();

    HttpUriRequest request = null;

    HttpResponse response = null;

    HttpEntity entity = null;

    private String utf8 = "UTF-8";

    private void get(String url, Map<String, String> params){

        try {
            url = addGetParam(url, params);
            request = new HttpGet(url);
            response = client.execute(request);

            if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                HttpEntity entity = response.getEntity();
                System.out.println(EntityUtils.toString(entity));
            } else {
                System.out.println("访问失败 : " + response.getStatusLine().getStatusCode());
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void post(String url, Map<String, String> params){
        try {

            request = new HttpPost(url);
            addPostStringEntity(request, params);
            response = client.execute(request);

            if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                HttpEntity entity = response.getEntity();
                System.out.println(EntityUtils.toString(entity));
            } else {
                System.out.println("访问失败 : " + response.getStatusLine().getStatusCode());
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {
        String url = "http://192.168.0.105/cuohe/dealMakerConversation/queryCustomerByCompanyName.do";
        Map<String, String> map = new HashMap<String, String>();
        map.put("companyName", "上海");
        map.put("itemId", "26276");
        if(args[0].toString().equals("get")){
            new App().get(url, map);
        } else if(args[0].toString().equals("post")){
            new App().post(url, map);
        } else {
            System.out.println("error Param!");
        }
    }


    /** 将参数拼接到url的后面
     * @param url
     * @param params
     * @return 拼接完成的url
     * @throws UnsupportedEncodingException
     */
    private String addGetParam(String url, Map<String, String> params) throws UnsupportedEncodingException {
        // 没有参数,直接返回
        if(params == null || params.size() == 0){
            return url;
        }
        boolean firstParam = Boolean.TRUE;
        String prefix = "";
        for(Entry<String, String> entry : params.entrySet()){
            // 第一个参数,前缀为?
            if(firstParam){
                prefix = "?";
                firstParam = Boolean.FALSE;
            } else {
                prefix = "&";
            }
            url += prefix + entry.getKey() + "=" + URLEncoder.encode(entry.getValue(), utf8);
        }
        return url;
    }

    @SuppressWarnings("unused")
    private HttpUriRequest addPostParam(HttpUriRequest request, Map<String, String> params) throws UnsupportedEncodingException {
        HttpPost post = (HttpPost) request;
        if(params == null || params.size() == 0){
            return post;
        }
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        for(Entry<String, String> entry : params.entrySet()){
            nameValuePairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
        }
        post.setEntity(new UrlEncodedFormEntity(nameValuePairs, utf8));

        return post;
    }

    /** 将文本以text内容的方式发送到服务器,使用Content-Type指定文本类型
     * @param request
     * @param params
     * @return
     * @throws UnsupportedEncodingException
     */
    private HttpUriRequest addPostStringEntity(HttpUriRequest request, Map<String, String> params) throws UnsupportedEncodingException {
        HttpPost post = (HttpPost) request;
        if(params == null || params.size() == 0){
            return post;
        }
//      post.setHeader("Content-Type", "text/plain"); //服务器端使用String类型接收参数
        post.setHeader("Content-Type", "application/json"); //服务器端使用json类型接收参数

        post.setEntity(new StringEntity(new Gson().toJson(params), utf8));
        return post;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值