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);
    }

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章