当前位置: 首页 > 知识库问答 >
问题:

Exchange RestTemplate给出400个错误请求

柴彬
2023-03-14

我正在RestTemplate中使用exchange for GET方法。但是在exchange方法中传递requestEntity时,我得到了400个错误的请求。下面是我正在使用的代码。

生成URL:

@GetMapping("/getValues")
    public ResponseEntity<ValueResponse> getValueCall(@RequestBody AccountDTO accountDTO) {
        Map<Integer, ValueEntity> crmMap = new HashMap<Integer, ValueEntity>();
        int accountNumber = accountDTO.getAccountNumber();
        valueMap.put(1, new ValueEntity("A", "B", "Tier 1", "DU", "Indian"));
        valueMap.put(2, new CRMEntity("C", "D", "Tier 2", "DU", "American"));
        valueMap.put(3, new CRMEntity("E", "F", "Tier 3", "DU", "English"));
        valueMap.put(4, new CRMEntity("G", "H", "Tier 1", "DU", "Australian"));
        ValueResponse valueResponse = new ValueResponse();
        for (Map.Entry<Integer, ValueEntity> entry : valueMap.entrySet()) {
            if (entry.getKey().equals(accountNumber)) {
                valueResponse.setAccountNumber(entry.getKey());
                valueResponse.setFirstName(entry.getValue().getFirstName());
                valueResponse.setLastName(entry.getValue().getLastName());
                valueResponse.setCustomerTier(entry.getValue().getCustomerTier());
                valueResponse.setCustomerType(entry.getValue().getCustomerType());
                valueResponse.setNationality(entry.getValue().getNationality());
                return new ResponseEntity<ValueResponse>(valueResponse, HttpStatus.OK);
            }
        }
        return null;
    }
public EnrollResponse enrollingUser(ValueDTO valueDTO) {
   MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, 
  String>();
  headers.add("Content-Type", "application/json");
  HttpEntity<ValueDTO> requestEntity = new HttpEntity<ValueDTO>(valueDTO, 
  headers);
  ResponseEntity<ValueResponse> enrollResponseEntity = 
  restTemplate.exchange("http://localhost:8080/getValues",
                HttpMethod.GET, requestEntity,  ValueResponse.class);
  return enrollResponseEntity.getBody();
}
public class ValueDTO { 
    private String firstName;
    private String lastName;
    private String dateOfBirth;
    private String gender;
    private String nationality;
    private String email;
    private String channelId;
    private int accountNumber;
    private String languageKnown;
//constructor
//getters and setters
}

public class ValueResponse {    
    private long accountNumber; 
    private String firstName;
    private String lastName;
    private String customerTier;
    private String customerType;
    private String nationality;
//constructor
//getters and setters
}

public class ValueEntity {  
    private String firstName;
    private String lastName;
    private String customerTier;
    private String customerType;
    private String nationality;
//constructor
//getters and setters
}

我尝试从postman访问producer URL,其标题为Content-Type:Application/JSON,正文为{“firstName”:“a”,“lastName”:“b”,“dateofbirding”:“12/12/12”,“gender”:“fomen”,“nationity”:“indian”,“email”:“abc@gmail.com”,“channelID”:“values App”,“accountNumber”:1,“languageKnown”:“English”}作为valueDto对象。

控制台:

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 null
    at org.springframework.html" target="_blank">web.client.HttpClientErrorException.create(HttpClientErrorException.java:79)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102)
    at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:778)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:736)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:670)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:579)
    at com.smilesmember.domain.AccountDomain.enrollingUser(AccountDomain.java:184)
    at com.smilesmember.controller.SmilesMemberController.enrollWS(SmilesMemberController.java:50)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)

共有1个答案

凌景辉
2023-03-14

如果下面的代码接受您提到的ValueDTO,请尝试下面的代码

ResponseEntity<ValueResponse> enrollResponseEntity = 
  restTemplate.exchange("http://localhost:8080/getValues",
                HttpMethod.GET, requestEntity,  new ParameterizedTypeReference<ValueResponse>() {});
 类似资料:
  • 我正在为一个项目使用Hackerrank API。查看官方文档,点击这里! 在他们的网站上有一个使用UNIREST的例子, 由于我使用的是axios,所以我将其转换为类似的axios代码,如下所示: 我希望这只适用于示例中所示的示例,但它给我带来了以下错误: 请求失败,状态代码为400 错误:请求失败,状态代码为400 在createError(createError.js:16) 在sett(s

  • 问题内容: 我是django-1.6的新手。当我使用运行django服务器时,它运行良好。但是,当我改变DEBUG到False在设置文件,然后在服务器停止,并让在命令提示符下以下错误: 更改为之后,在浏览器中出现错误: 是否可以在没有调试模式的情况下运行Django? 问题答案: 该ALLOWED_HOSTS列表应包含标准主机名,而不是 URL。省略端口和协议。如果你使用127.0.0.1,我也将

  • 我正在使用实现一个联系人应用程序。现在,我正试图通过发送以下格式的put请求来更新联系人 我将XML作为字符串发送,作为请求的主体。这是我的xmlString(请求主体) 我写了下面的代码来发送更新联系人的PUT请求。 当我试图在中发送请求时,联系人更新成功。但是当我试图运行上面的程序时,我得到了 400错误请求错误 我不知道我哪里出错了。任何帮助都将不胜感激!

  • 当我从JUnit测试用例向Rest服务发送请求时,我收到了400个坏请求。我的密码。错误日志快结束了。请帮我解决这个问题。当我通过直接在URL中传递参数来调用服务器为:restTemplate.getForObject(BASE_URL+“/Remote?ServiceName=SimpleService&Source=Web”,HelloWorld.Class)时,不会出现任何错误。但如何通过使

  • 我在Eclipse Photon上用Java8编写了一个简单的webService,使用RestTemplate发布(使用postForObject)一个对象(称为patentListWrapper),该对象包装了一个对象列表(称为PatentDetails)。我从Java客户机(称为MainWsClient)发布,然后在服务器端的patentDetails中设置一个值,并在客户机中读取paten

  • 我有一个基于Spring Web model view controller(MVC)框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8 我有这个控制器 这个URL一切正常: