resttemplate - Exchange RestTemplate 给出 400 Bad Request
问题描述
我在 RestTemplate 中使用交换 GET 方法。但是在交换方法中传递 requestEntity 时,我收到了 400-Bad Request。下面是我正在使用的代码。
生成 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;
}
使用 URL:
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();
}
实体和 DTO:
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
}
我尝试使用 Header 作为 Content-Type:application/json 和 Body: { "firstName":"A", "lastName" : "B", "dateOfBirth" : "12/12/12", “性别”:“女性”,“国籍”:“印度人”,“电子邮件”:“abc@gmail.com”,“channelId”:“Values App”,“accountNumber”:1,“languageKnown”:“English” } 作为 valueDto 对象。
安慰:
org.springframework.web.client.HttpClientErrorException$BadRequest: 400 null
at org.springframework.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)
解决方案
如果它接受您提到的 ValueDTO,请尝试以下代码
ResponseEntity<ValueResponse> enrollResponseEntity =
restTemplate.exchange("http://localhost:8080/getValues",
HttpMethod.GET, requestEntity, new ParameterizedTypeReference<ValueResponse>() {});
推荐阅读
- python - 将字符串(列表列表)转换为列表 python
- python - Python 中的异常处理 - mysql.connector
- serverless - 无服务器 AWS-IAM 权限
- groovy - Katalon 和 Chrome 无头模式的屏幕截图
- asp.net-mvc - 登录 AspNetCore 托管/重定向控制台输出
- mysql - MySql,如果没有返回行,则返回默认值
- python - Psycopg2:在 Dash 应用程序中使用外部变量进行查询
- aggregate - 在 Tableau 中将聚合字段转换为非聚合字段
- c# - 使用 Microsoft 帐户在 UWP 应用上单点登录未按预期工作
- java - 比较两个列表对象,但某些对象参数为 nul