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 即可.

  • 相关阅读:
    win10使用4G 模块RNDIS模式上网
    转]GSM模块信号强度CSQ与RSSI的对应关系
    /etc/inittab文件详解
    网口扫盲一:网卡初步认识
    网口扫盲二:Mac与Phy组成原理的简单分析
    网口扫盲三:以太网芯片MAC和PHY的关系
    【 MAKEFILE 编程基础之四】详解MAKEFILE 函数的语法与使用!
    【 MAKEFILE 编程基础之三】详解 MAKEFILE 变量的定义规则使用!
    转载:基于jquery的bootstrap在线文本编辑器插件Summernote
    HTML特殊符号对照表、常用的字符实体
  • 原文地址:https://www.cnblogs.com/whaleX/p/12688367.html
Copyright © 2011-2022 走看看