【问题标题】:org.springframework.web.client.HttpClientErrorException: 400 Bad Request using HttpEntity restTemplate.exchangeorg.springframework.web.client.HttpClientErrorException: 400 Bad Request using HttpEntity restTemplate.exchange
【发布时间】:2018-03-26 09:41:43
【问题描述】:

我在向客户端 api 发布一些数据时收到 HttpClientErrorException: 400 Bad Request。

异常堆栈跟踪:

org.springframework.web.client.HttpClientErrorException: 400 Bad Request
org.springframework.web.client.HttpClientErrorException: 400 Bad Request
        at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
        at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:667)
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:620)
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:580)
        at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:498)

代码

模式类 1:UserApiResponseBean.java

import java.util.List;

public class UserApiResponseBean {

    private String userCode;

    private String userName;

    private List<Department> DepartmentList;

    public String getUserCode() {
        return userCode;
    }

    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public List<Department> getDepartmentList() {
        return DepartmentList;
    }

    public void setDepartmentList(List<Department> departmentList) {
        DepartmentList = departmentList;
    }

}

模型类 2:Department.java

public class Department {

    private String departmentName;

    private String businessArea;

    public String getDepartmentName() {
        return departmentName;
    }

    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }

    public String getBusinessArea() {
        return businessArea;
    }

    public void setBusinessArea(String businessArea) {
        this.businessArea = businessArea;
    }

}

客户端代码:调用客户端api的代码段

UserApiResponseBean userApiResponseBean = new UserApiResponseBean();
        userApiResponseBean.setUserName("userName1");
        userApiResponseBean.setUserCode("001");

        List<Department> departmentList = new ArrayList<Department>();

        Department departmanetData = new Department();
        departmanetData.setDepartmentName("Department 1");
        departmanetData.setBusinessArea("Business Area 1");

        departmentList.add(departmanetData);

        userApiResponseBean.setDepartmentList(departmentList);

        String userId="userId";
        String password="password";

        String url = "client api url";

        HttpHeaders requestHeader = new HttpHeaders();
        String encoding = Base64.getEncoder().encodeToString((userId + ":" + password).getBytes());
        requestHeader.add(HttpHeaders.AUTHORIZATION, "Basic " + encoding);
        requestHeader.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        requestHeader.setContentType(MediaType.APPLICATION_JSON);

        HttpEntity<UserApiResponseBean> requestEntity = new HttpEntity<UserApiResponseBean>(userApiResponseBean, requestHeader);

        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
        restTemplate.getMessageConverters().add(new StringHttpMessageConverter());

        ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
        String result = responseEntity.getBody();

不知何故,请求构造被破坏了。你能帮忙吗? 我在 Model 类中没有任何 json/xml 相关的注释,spring-context.xml 中也没有 json/spring rest 相关的数据。那是问题吗? 我们使用的是 Spring 4.3.0

客户端需要一个 json 数据,他们没有相同的 UserApiResponseBean.java 类。

【问题讨论】:

    标签: java spring post resttemplate httpentity


    【解决方案1】:

    仅添加转换器名称是不够的。确保 Jackson2 存在于您的类路径中

    杰克逊 2.x – com.fasterxml.jackson.databind

    如果使用 Maven

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.6.3</version>
    </dependency>
    

    【讨论】:

    • 你能举个例子吗
    • 我的pom.xml中已经有了这个依赖,但是问题依然存在。
    • 结构如何损坏?你有错误消息吗?
    • 不,我假设它已损坏。除了 org.springframework.web.client.HttpClientErrorException: 400 Bad Request 之外,我在 stacktrace 中没有看到任何特定消息
    • 尝试添加这个:requestHeader.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多