RestTemplate post请求传递map 还是MultiValueMap

昨天与同事联调http接口,准备用RestTemplate 进行请求,调用post请求,,但是参数死活传不进去:

测试对比:

先贴出自己的接口方法如下

public class User {


    private String loginname;
//    @Size(min=6 ,max= 20 ,message = "{items.password.size}")
    private String password;
//    @Size(min=3,max = 10,message = "{items.name.size}")
    private String username;

//    @NotNull
    private Integer age;

    public User() {

    }

    public String getLoginname() {
        return loginname;
    }

    public void setLoginname(String loginname) {
        this.loginname = loginname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String toString() {
        return "User{" +
                "loginname='" + loginname + '\'' +
                ", password='" + password + '\'' +
                ", username='" + username + '\'' +
                '}';
    }
}
    controller 中的get post测试接口

@RequestMapping(value = "/userone",method = RequestMethod.GET)
    @Validation
    public @ResponseBody String logUserOne(
            @Validated User user) {

        return user.toString();

    }

    @PostMapping(value = "/userone1")
    @ResponseBody
    public  String logUserOne1(@RequestBody User user) {

        return user.toString();

    }

 

下面为postman请求:结果正常

 

准备在代码中进行测试:遇到如下错误

写如下测试方法:

1.直接传map,运行结果可以出来
        result = restTemplate.postForObject(url, map, String.class);
        System.out.println("map:"+result);

2.此种传法报错
org.springframework.web.client.HttpClientErrorException: 415 Unsupported Media Type

        result = restTemplate.postForObject(url, paramMapt, String.class);
        System.out.println("paramMapt:"+result);

3.此种传法也报错
org.springframework.web.client.HttpClientErrorException: 400 Bad Request

        result = restTemplate.postForObject(url, formEntity, String.class);

经过查看 spring相关的jar包版本为4.3.7
以前看到其他同事写的都是使用的第三种方法,发现运行的相当正常,不知现在自己使用怎么这么费劲,希望有知道的朋友给与答疑解惑

 @Test
    public void getbdc23(){

        RestTemplate restTemplate = new RestTemplate();
        String result =null;
        Map<String,String> map = new HashMap<>();
        map.put("loginname", "spw2444");
        map.put("password", "passpasss");
        map.put("username", "username");

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType( MediaType.APPLICATION_JSON );

//        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        headers.add("Accept","application/json");
        MultiValueMap<String, String> paramMapt = new LinkedMultiValueMap<String, String>() {
            {
                this.add("loginname", "loginname");
                this.add("password", "passpasss");
                this.add("username", "username");
            }
        };

        HttpEntity<MultiValueMap<String, String>> formEntity = new HttpEntity<MultiValueMap<String, String>>(paramMapt, headers);
        String url = "http://localhost:8083/validated/userone1";

//        ResponseEntity<String> result = restTemplate.postForEntity(url, formEntity, String.class,map);

//        System.out.println(result.getBody());
        User user = new User();
        user.setLoginname("longinna");
        user.setPassword("pass");
        user.setUsername("name");
        result = restTemplate.postForObject(url, map, String.class);
        System.out.println("map:"+result);
        result = restTemplate.postForObject(url, paramMapt, String.class);
        System.out.println("paramMapt:"+result);
        result = restTemplate.postForObject(url, formEntity, String.class);
        System.out.println("formEntity:"+result);
    }

 

 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Java RestTemplate 是 Spring Framework 提供的一个用于访问 REST 服务的客户端工具类。它简化了与 RESTful Web 服务的通信,可以发送 GET、POST、PUT、DELETE 请求等,并支持通过多种方式传递参数和请求体。使用 RestTemplate 发送 HTTP 请求时,可以使用 Spring 提供的 MessageConverter 将请求和响应转换为相应的 Java 对象,从而方便处理返回的 JSON/XML 数据。 RestTemplate 的使用非常简单,只需要实例化一个 RestTemplate 对象,然后使用该对象的方法来发送请求即可。例如,可以使用 RestTemplate 的 getForObject() 方法发送 GET 请求并返回响应体: ```java RestTemplate restTemplate = new RestTemplate(); String url = "http://example.com/api/resource"; String response = restTemplate.getForObject(url, String.class); ``` 除了 getForObject() 方法,还有 postForObject()、put()、delete() 等方法可供使用。 如果需要传递参数,可以将参数封装为一个 Map 对象,然后将其传递给方法。例如,可以使用 RestTemplatepostForObject() 方法发送 POST 请求传递参数: ```java RestTemplate restTemplate = new RestTemplate(); String url = "http://example.com/api/resource"; MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); params.add("param1", "value1"); params.add("param2", "value2"); String response = restTemplate.postForObject(url, params, String.class); ``` 以上就是 Java RestTemplate 的基本介绍和使用方法。如有需要,可以参考 Spring 官方文档进一步了解该工具类的更多特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值