我正在尝试使用休息服务,我正在发布一些数据,RestTemplate
postForObjectMethod
但是我得到了一个null响应,即使我可以在有效负载中看到请求和响应.
[更新]我正在使用拦截器实施ClientHttpRequestInterceptor
,如果我删除它,我得到了响应.
[PS:该服务配置为POST,理想情况下它应该是GET,原因很明显,但我仍然很好奇为什么没有响应作为帖子的一部分来,即使我可以在http日志中看到相同.]
配置基于Spring MVC 4的应用程序
应用背景:
杰克逊POM
com.fasterxml.jackson.core jackson-core ${jackson.version} com.fasterxml.jackson.core jackson-annotations ${jackson.version} com.fasterxml.jackson.core jackson-databind ${jackson.version}
拦截器类
public class LoggingRequestInterceptor implements ClientHttpRequestInterceptor { final static Logger logger = LoggerFactory.getLogger(LoggingRequestInterceptor.class); @Override public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { traceRequest(request, body); ClientHttpResponse response = execution.execute(request, body); traceResponse(response); return response; } private void traceRequest(HttpRequest request, byte[] body) throws IOException { logger.debug("===========================request begin================================================"); logger.debug("URI : " + request.getURI()); logger.debug("Method : " + request.getMethod()); logger.debug("Request Body : " + new String(body, "UTF-8")); logger.debug("==========================request end================================================"); } private void traceResponse(ClientHttpResponse response) throws IOException { StringBuilder inputStringBuilder = new StringBuilder(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response.getBody(), "UTF-8")); String line = bufferedReader.readLine(); while (line != null) { inputStringBuilder.append(line); inputStringBuilder.append('\n'); line = bufferedReader.readLine(); } logger.debug("============================response begin=========================================="); logger.debug("status code: " + response.getStatusCode()); logger.debug("status text: " + response.getStatusText()); logger.debug("Response Body : " + inputStringBuilder.toString()); logger.debug("=======================response end================================================="); } }
GetAllEmployeesClass
public class GetAllEmployeesVO { private ResponseVO response; private Listemployees; private String actionCode; public String getActionCode() { return actionCode; } public void setActionCode(String actionCode) { this.actionCode = actionCode; } public ResponseVO getResponse() { return response; } public void setResponse(ResponseVO response) { this.response = response; } public List getEmployees() { return employees; } public void setEmployees(List employees) { this.employees = employees; } }
调节器
@RestController public class RestAdminstrationController { @Autowired private RestTemplate restTemplate; @Value("${rest.getallemployees.api.endpoint}") private String getEmpEndpt; @RequestMapping(value = AppConstatants.GET_EXISTING_APP_USERS, method = RequestMethod.POST) public ListloadAppAdminUsers(@RequestBody GetAllEmployeesVO userData) { try { //get Rest Service Data GetAllEmployeesVO resp= restTemplate.postForObject(getEmpEndpt,userData,GetAllEmployeesVO.class); //resp is coming as null
请求响应HTTP有效负载日志:
2015-12-12 15:45:53 DEBUG RestTemplate:79 - Created POST request for "http://103.35.123.23:8080/siplrestservices/sipl/EmployeeService/getAllEmployees"
2015-12-12 15:45:53 DEBUG RestTemplate:720 - Setting request Accept header to [application/json, application/*+json]
2015-12-12 15:45:53 DEBUG RestTemplate:797 - Writing [com.sipl.common.beans.GetAllEmployeesVO@1dd42575] using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@52e7339f]
2015-12-12 15:45:53 DEBUG LoggingRequestInterceptor:36 - ===========================request begin================================================
2015-12-12 15:45:53 DEBUG LoggingRequestInterceptor:38 - URI : http://xxxxx:8080/siplrestservices/sipl/EmployeeService/getAllEmployees
2015-12-12 15:45:53 DEBUG LoggingRequestInterceptor:39 - Method : POST
2015-12-12 15:45:53 DEBUG LoggingRequestInterceptor:40 - Request Body : {"response":null,"employees":null,"actionCode":"M"}
2015-12-12 15:45:53 DEBUG LoggingRequestInterceptor:41 - ==========================request end================================================
2015-12-12 15:45:54 DEBUG LoggingRequestInterceptor:53 - ============================response begin==========================================
2015-12-12 15:45:54 DEBUG LoggingRequestInterceptor:54 - status code: 201
2015-12-12 15:45:54 DEBUG LoggingRequestInterceptor:55 - status text: Created
2015-12-12 15:45:54 DEBUG LoggingRequestInterceptor:56 - **Response Body : {"employees":[{"commonName":"MOHAN KUMAR GHOSHAL","countryCode":"","dateOfJoining":"2015-11-23","designationId":"4","division":"GENERAL","emailId":"","employeeId":"1","employeeNo":"M-392","employeeStatus":"1","hqCityId":"2","lastWorkingDate":"2015-11-23","mobile":{"mobileStatus":"1"},"mobileNo":"1234567890"}],"response":{"respCd":"0","respDesc":"SUCCESS"}}**
2015-12-12 15:45:54 DEBUG LoggingRequestInterceptor:57 - =======================response end=================================================
2015-12-12 15:45:54 DEBUG RestTemplate:632 - POST request for "http://xxxxx:8080/siplrestservices/sipl/EmployeeService/getAllEmployees" resulted in 201 (Created)
Nati.. 8
您可以使用BufferingClientHttpRequestFactory.它允许多次读取响应.
您可以使用BufferingClientHttpRequestFactory.它允许多次读取响应.