使用RestTemplate从另一服务中获取数据时,邮递员出现错误。
我有两项服务。第一服务具有用户细节实体类,第二服务具有帖子实体类。这是发布控制器的代码。
@GetMapping("/findpostbyareacode/{areacode}")
List<Posts> getPostByAreacode(@PathVariable(value="areacode") Long areacode){
RestTemplate restTemplate=new RestTemplate();
ResponseEntity<List<UserDetails>> response=
restTemplate.exchange("http://localhost:8091/voiceofbengal/userdetailsbyareacode/"+areacode, HttpMethod.GET,
null, new ParameterizedTypeReference<List<UserDetails>>(){
});
List<UserDetails> body=response.getBody();
List<Posts> postList=new ArrayList<>();
List<Posts> totalPost=new ArrayList<>();
for(UserDetails users : body) {
totalPost=postService.findByU_id(users.getU_id());
for(Posts posts : totalPost) {
postList.add(posts);
}
}
return postList;
}
我在邮递员中遇到此错误。
"timestamp": "2019-01-17T09:10:32.977+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Error while extracting response for type [java.util.List<com.css.vob.model.UserDetails>] and content type [application/json;charset=UTF-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.util.Date` from String \"01-01-1990\": not a valid representation (error: Failed to parse Date value '01-01-1990': Cannot parse date \"01-01-1990\": not compatible with any of standard forms (\"yyyy-MM-dd'T'HH:mm:ss.SSSZ\", \"yyyy-MM-dd'T'HH:mm:ss.SSS\", \"EEE, dd MMM yyyy HH:mm:ss zzz\", \"yyyy-MM-dd\")); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String \"01-01-1990\": not a valid representation (error: Failed to parse Date value '01-01-1990': Cannot parse date \"01-01-1990\": not compatible with any of standard forms (\"yyyy-MM-dd'T'HH:mm:ss.SSSZ\", \"yyyy-MM-dd'T'HH:mm:ss.SSS\", \"EEE, dd MMM yyyy HH:mm:ss zzz\", \"yyyy-MM-dd\"))\n at [Source: (PushbackInputStream); line: 1, column: 57] (through reference chain: java.util.ArrayList[0]->com.css.vob.model.UserDetails[\"dob\"])",
编辑-尝试使用@Pijotrek的解决方案后,现在出现此错误。
"message": "could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet"
这是我的实体类,DAO和JPARepository
This is entity class of UserDetails
这是我从后控制器调用的用户详细信息的Controller方法-
@GetMapping("/userdetailsbyareacode/{areacode}")
public ResponseEntity<List<UserDetails>> getUserByAreacode(@PathVariable(value="areacode") Long areacode){
List<UserDetails> user=userdetailsService.getuserByAreacode(areacode);
if(user==null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok().body(user);
}
这是后控制器的JPAR存储库-
public interface PostRepository extends JpaRepository<Posts,Long> {
@Transactional
@Query(nativeQuery=true,value="SELECT * FROM POSTS WHERE U_ID=:u_id")
List<Posts> findPostsByU_id(@Param("u_id") Long u_id);
答案 0 :(得分:0)
您会在请求中发送带有一些用户详细信息的正文。
ResponseEntity<List<UserDetails>> response= restTemplate.exchange("http://localhost:8091/voiceofbengal/userdetailsbyareacode/"+areacode, HttpMethod.GET,
null, new ParameterizedTypeReference<List<UserDetails>>(){
});
读取错误,我假设您的UserDetails
类具有一个名为dob
的字段。您在Controller
类中获得的REST API(这是一种不好的做法)尝试转换该dob
字段并由于未以任何可接受的格式编写而导致异常。可接受的格式为:(\"yyyy-MM-dd'T'HH:mm:ss.SSSZ\", \"yyyy-MM-dd'T'HH:mm:ss.SSS\", \"EEE, dd MMM yyyy HH:mm:ss zzz\", \"yyyy-MM-dd\"));
。这一切都在您的错误消息中。
因此,将dob
的格式设置为"1990-01-01T10:00:00.000Z"
或"1990-01-01"
,这样就可以正常工作了。
或者,如果您控制要在Controller
中调用的REST API,则可以使用@DateTimeFormat
注释来匹配当前发送的格式,即:@DateTimeFormat(pattern = "dd-MM-yyyy")
< / p>
您的返回类型对于执行本机查询是错误的。无论如何,您不必使用一个,可以将方法名称更改为以下内容:
@Transactional
List<Posts> findPostsByUserId(Long id);
这应该可以解决问题