zoukankan      html  css  js  c++  java
  • 【随手记录】实体类里方法自动执行问题

    在写微服务时候遇到一个问题,提供者的实体类会自动执行其中的方法(即使这个方法没有调用)然后这个方法报错了!这就神奇了,明明没有调用为啥会执行?

    org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: (was java.lang.NullPointerException); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: 
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:296),
    at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:103),
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290),
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:180),
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:82),
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:119),
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895),
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800),
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87),
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038),
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942),
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005),
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908),
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660),
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882),
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741),
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231),
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166),
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53),
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193),
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166),
    at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90),
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107),
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193),
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166),
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99),
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107),
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193),
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166),
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92),
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107),
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193),
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166),
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93),
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107),
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193),
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166),
    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117),
    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106),
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107),
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193),
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166),
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200),
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107),
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193),
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166),
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200),
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96),
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490),
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139),
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92),
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74),
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343),
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408),
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66),
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834),
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415),
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49),
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source),
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source),
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61),
    at java.lang.Thread.run(Unknown Source),
    Caused by: com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: 
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:394),
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:353),
    at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:316),
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:727),
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155),
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145),
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107),
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25),
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:727),
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719),
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155),
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480),
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319),
    at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1396),
    at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:913),
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:287),
    ... 61 more,
    Caused by: java.lang.NullPointerException,
    at sun.reflect.GeneratedMethodAccessor216.invoke(Unknown Source),
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source),
    at java.lang.reflect.Method.invoke(Unknown Source),
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:688),
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719),
    ... 73 more, 

    查了下资料,在我们使用的jackson里,对于实体类,内部所有以getXx命名开始的方法,在json序列化的过程中,所有的getter方法会被看作是一个获取成员属性值的方法而被自动执行,即使没有这个成员属性,以此获取到的返回值作为value,getXx 去掉get获取属性Xx作为key

    为了避免这种情况,实体类里如果不是成员属性的封装特性(getter setter),最好不要以getXx命名开头或者在jackson中,提供了相应的annotation,可以把这类方法忽略掉。在方法前加上@JsonIgnore 即可.

  • 相关阅读:
    获取 iPhone 上联系人姓名、电话、邮件的代码
    NSDate常用代码范例
    iphone开发之多线程NSThread和NSInvocationOperation
    iphone 定时提醒
    iphone 程序自动登陆
    搞定大厂算法面试之leetcode精讲11剪枝&回溯
    大厂算法面试之leetcode精讲7.双指针
    大厂算法面试之leetcode精讲8.滑动窗口
    大厂算法面试之leetcode精讲15.链表
    大厂算法面试之leetcode精讲10.递归&分治
  • 原文地址:https://www.cnblogs.com/whaleX/p/12688367.html
Copyright © 2011-2022 走看看