【发布时间】:2019-08-29 14:48:36
【问题描述】:
我在 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 从邮递员访问生产者 URL: { "名字":"A", “姓氏”:“B”, “出生日期”:“12 年 12 月 12 日”, “性别女”, “国籍”:“印度人”, “电子邮件”:“abc@gmail.com”, "channelId" :"价值应用", “帐号”:1, “languageKnown”:“英语” } 作为 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)
【问题讨论】:
-
HttpEntity
requestEntity 您正在传递 ValueDTO 但 GET api 接受 AccountDTO。请检查 -
这是一个拼写错误。它本身接受 ValueDTO。
标签: resttemplate