在使用RestTemplate从另一个服务获取数据时,我在postman中出错。
我有两种服务。第一个服务有userdetails实体类,第二个服务有posts实体类。这是邮局管理员的代码。
@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
这是UserDetails的实体类
这是我一直从后控制器调用的用户详细信息的控制器方法-
@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);
}
这是邮局管理员的建议-
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);
您在请求中发送了一个包含一些用户详细信息的正文。
ResponseEntity<List<UserDetails>> response= restTemplate.exchange("http://localhost:8091/voiceofbengal/userdetailsbyareacode/"+areacode, HttpMethod.GET,
null, new ParameterizedTypeReference<List<UserDetails>>(){
});
读取错误时,我假设您的UserDetails
类有一个名为dob
的字段。您在控制器
类中访问的REST API(顺便说一句,这是一种不好的做法)尝试转换dob
字段,并得到一个异常,因为它不是以任何可接受的格式编写的。可接受的格式为:(“yyyy-MM-dd'T'HH:MM:ss.SSSZ\”、“yyy-MM-dd'HH:MM:ss.SSS\”、“EEE,dd-MMM-yyyy-HH:MM:ss-zzz\”、“yyy-MM-dd\”)
。都在你的错误信息里。因此,将你的
dob
格式设置为“1990-01-01T10:00:00.000Z”
或“1990-01-01”
,应该可以正常工作。
或者,如果您控制您在
Controller
中调用的REST API,您可以使用@DateTimeFormat
注释来匹配您目前发送的格式,即:@DateTimeFormat(模式="dd-MM-yyyy")
您的返回类型不适合执行本机查询。无论如何,您不必使用它,您可以将方法名称更改为以下内容:
@Transactional
List<Posts> findPostsByUserId(Long id);
这就应该奏效了
我正在为我的API使用Spring Boot。我正在重写我的API,以采用微服务体系结构。 我有两门课: 1) 产品 2) 配料 我的代码: 以下是我的产品类别: 这是我的配料课: 在产品微服务中,我正在对成分微服务进行API调用: 但是,上面的getComponents()方法不起作用。 我的问题: 我想从Component microservice获取数据,但是,出现以下错误: “错误”:“内
我想知道你是否能帮忙。我正在编写一个订单系统,目前已经实现了一个订单微服务来处理下订单。我正在使用DDD与事件源和CQRS。 订单服务本身接收生成事件的命令,实际的订单服务侦听自己的事件以创建读取模型(这里的想法是使用CQR,因此用于写入的命令和用于读取的查询) 在执行上述操作后,我遇到了一个问题,可能只是我没有完全理解正确的方法。 一个订单实际上有依赖项,这意味着一个订单需要一个客户和一个产品。
问题内容: 我需要从一些在线资源中获取时间- NTP服务器,JSON时间服务器,或者可能只是HTTP标头。我不在乎精度,但是我确实需要从在线资源中获取时间。我无权访问任何服务器,因此无法编写任何服务器端代码。 我无法使用HTTP请求来获取标头,因为我猜这将违反相同的原始策略。 而且我似乎找不到一种不涉及某些级别的PHP或其他语言的方法-我只能使用HTML / CSS / JS …没别的! 有任何想
问题内容: 我试图使用Angular从远程WS以Json格式获取数据,但遇到了一些麻烦。数据正确地来自Web服务,但是我不能在控制器内部使用它。这是为什么?角度代码: HTML: 问题答案: 您应该将$ http.get放入控制器中。 而且,Web服务返回的对象不是数组。因此,您的ng-repeat应该是这样的: 这是一个工作示例:
各位专家下午好, 我需要调用3个REST API的顺序调用,作为单个客户机调用GET/offers的一部分,以检索百货公司不同通道中每种产品的可用报价,如下所示 然后在循环中检索每个并调用第二个API以获得产品 然后在循环中检索每个并调用第三个API以获得提供 最后,整理所有的响应,将报价列表发送给客户。
我得到了错误: 06-24 10:41:36.497 173 16-17316/com.example.waseem.geolocation:location_service e/androidruntime:致命异常:main process:com.example.waseem.geolocation:location_service,pid:17316 java.lang.runtimeEx