微服务中的异常 java.lang.NoSuchMethodException
Caused by: java.lang.reflect.UndeclaredThrowableException: nullat com.xmeport.msa.service.impl.NoticeServiceImpl$$EnhancerBySpringCGLIB$$b760761e.query(<generated>) ~[classes/:na]at com.xme...
·
Caused by: java.lang.reflect.UndeclaredThrowableException: null
at com.xmeport.msa.service.impl.NoticeServiceImpl$$EnhancerBySpringCGLIB$$b760761e.query(<generated>) ~[classes/:na]
at com.xmeport.msa.controller.notice.NoticeService.getPage(NoticeService.java:48) ~[classes/:na]
at com.xmeport.msa.controller.notice.NoticeService$$FastClassBySpringCGLIB$$ad0d94dc.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684) ~[spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at com.xmeport.msa.controller.notice.NoticeService$$EnhancerBySpringCGLIB$$629acc0d.getPage(<generated>) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191]
at org.apache.servicecomb.swagger.engine.SwaggerProducerOperation.doInvoke(SwaggerProducerOperation.java:180) [swagger-invocation-core-1.0.0.B003.H98.jar:1.0.0.B003.H98]
... 62 common frames omitted
Caused by: java.lang.NoSuchMethodException: com.xmeport.msa.service.impl.NoticeServiceImpl.query()
at java.lang.Class.getDeclaredMethod(Class.java:2130) ~[na:1.8.0_191]
at com.xmeport.msa.common.aop.DataSourceAspect.setDataSourceData(DataSourceAspect.java:34) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191]
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) ~[spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:626) ~[spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.aop.aspectj.AspectJMethodBeforeAdvice.before(AspectJMethodBeforeAdvice.java:44) ~[spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:55) ~[spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93) ~[spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) ~[spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
... 73 common frames omitted
/**
* 获取分页列表
*/
@PostMapping("/get-page")
public @ResponseBody ApiResponses<IPage<NoticeListVO>> getPage(NoticeQueryVO noticeQueryVO) {
PageBO<NoticeQueryBO> page = PageBO.newPage(request);
PageBO resultPage = restTemplate.postForObject("cse://msa-service/notice/get-page",
noticeQueryVO.convert(NoticeQueryBO.class).setPage(page), PageBO.class);
Page<NoticeListVO> noticePage = resultPage.convert(Page.class);
return success(noticePage);
}
在调试微服务的项目中,当调用这个接口时,可以正常调用,但是进入到Service层(这个相当于微服务的中转层,实现业务逻辑在这里)时,无法调用里面的query()方法,会报上面的错误。
@RestSchema(schemaId = "msa.service.NoticeService")
@RequestMapping("/notice")
public class NoticeService {
@Autowired
private INoticeService noticeService;
@Autowired
private IAttachmentService attachmentService;
@PostMapping("/get-page")
public @ResponseBody
PageBO getPage(@RequestBody NoticeQueryBO noticeQueryBO) {
LambdaQueryWrapperChain<Notice> condition = noticeService.query()
.eq((noticeQueryBO.getCategory() != null), Notice::getCategory, noticeQueryBO.getCategory())
.eq(StringUtils.isNotBlank(noticeQueryBO.getTitle()), Notice::getTitle, noticeQueryBO.getTitle())
.gt(noticeQueryBO.getPublishTimeStart() != null, Notice::getPublishTime, noticeQueryBO.getPublishTimeStart())
.lt(noticeQueryBO.getPublishTimeEnd() != null, Notice::getPublishTime, noticeQueryBO.getPublishTimeEnd())
.eq(Notice::getIsDel, "N");
condition.orderByDesc(Notice::getPublishTime);
IPage<Notice> page = condition.page(noticeQueryBO.getPage().convert(Page.class));
IPage<NoticeListBO> pageBO = page.convert(e -> e.convert(NoticeListBO.class));
return PageBO.newPage(pageBO);
}
一开始认为传参有错误,其实这里把查询的方法写对应的Serviceimpl里,才不会报错。
@RestSchema(schemaId = "msa.service.NoticeService")
@RequestMapping("/notice")
public class NoticeService {
@Autowired
private INoticeService noticeService;
@Autowired
private IAttachmentService attachmentService;
@PostMapping("/get-page")
public @ResponseBody
PageBO getPage(@RequestBody NoticeQueryBO noticeQueryBO) {
System.out.println(1);
System.out.println(2);
IPage<Notice> page = noticeService.getPage(noticeQueryBO);
IPage<NoticeListBO> pageBO = page.convert(e -> e.convert(NoticeListBO.class));
return PageBO.newPage(pageBO);
}
上面的情况是针对
restTemplate.postForObject才需要的。
如果情况是
restTemplate.getForObject 可以不用,直接在service(业务中转层)上用注入的Service的query()方法。
更多推荐
已为社区贡献1条内容
所有评论(0)