記錄自己工作中遇到問題


反序列化報錯(枚舉類中-1不能反序列化,1,0都沒問題)

  
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;

/**
* @steam :
* @ClassName: WfcjShzt
* @author: ZK
* @data: 2020/9/1 14:33
* @Description:
*/
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
@Getter
public enum WfcjSfsb implements PersistEnum2DB<Integer> {
   WS(0,"未審批"),TH(-1,"退回"),YS(1,"已審批");
   private Integer code;
   private String name;
   WfcjSfsb(Integer code , String name){
       this.code = code;
       this.name = name;
  }

   /**
    * 根據常量的序數返回對應的權限類型枚舉常量。
    * @param code 序數,code()的返回值。
    * @return
    */
   public static WfcjSfsb getByCode(Integer code){
       for(WfcjSfsb type: WfcjSfsb.values()){
           if(code.equals(type.getCode())){
               return type;
          }
      }
       return  null;
  }


   @Override
   public Integer getData() {
       return code;
  }


   public static class Converter extends AbstractEnumConverter<WfcjSfsb, Integer> {
       public Converter() {
           super(WfcjSfsb.class);
      }
  }
}
  1. 12:13:15 [http-nio-8280-exec-1] ERROR c.l.exception.BDExceptionHandler - JSON parse error: Cannot deserialize value of type com.lehand.enums.WfcjSfsb from String "-1": value not one of declared Enum instance names: [YS, TH, WS]; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type com.lehand.enums.WfcjSfsb from String "-1": value not one of declared Enum instance names: [YS, TH, WS] at [Source: (PushbackInputStream); line: 1, column: 463] (through reference chain: com.lehand.models.fjcj.Wfcj["sfsb"]) org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type com.lehand.enums.WfcjSfsb from String "-1": value not one of declared Enum instance names: [YS, TH, WS]; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type com.lehand.enums.WfcjSfsb from String "-1": value not one of declared Enum instance names: [YS, TH, WS] at [Source: (PushbackInputStream); line: 1, column: 463] (through reference chain: com.lehand.models.fjcj.Wfcj["sfsb"]) at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:245) at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:227) at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:204) at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:157) at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:130) at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:124) at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:165) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) 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:998) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:901) at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875) 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.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilterMissing open brace for subscript​ConnectionHandler.process(AbstractProtocol.java:770) at org.apache.tomcat.util.net.NioEndpoint​Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type com.lehand.enums.WfcjSfsb from String "-1": value not one of declared Enum instance names: [YS, TH, WS] at [Source: (PushbackInputStream); line: 1, column: 463] (through reference chain: com.lehand.models.fjcj.Wfcj["sfsb"]) at com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:67) at com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:1549) at com.fasterxml.jackson.databind.DeserializationContext.handleWeirdStringValue(DeserializationContext.java:911) at com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserializeAltString(EnumDeserializer.java:255) at com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:179) at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:127) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:369) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159) at com.fasterxml.jackson.databind.ObjectMapper.readMapAndClose(ObjectMapper.java:4013) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3084) at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:239) ... 70 common frames omitted 2020-10-22 12:18:05 JRebel: Reloading class 'com.lehand.controller.fjcj.WfcjController'. 14:19:09 [HikariPool-1 housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=50m57s735ms763µs800ns). 14:25:14 [http-nio-8280-exec-4] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data repositories in DEFAULT mode. 14:25:14 [http-nio-8280-exec-4] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 7ms. Found 0 repository interfaces. 2020-10-22 14:25:15 JRebel: Reconfiguring bean 'wfcjController' [com.lehand.controller.fjcj.WfcjController] 14:25:21 [http-nio-8280-exec-7] INFO com.lehand.utils.ToolUtil - ipadd : null 14:25:21 [http-nio-8280-exec-7] INFO com.lehand.utils.ToolUtil - ip --> 127.0.0.1

  2. 錯誤代碼

  1. 原因 ,json解析反序列化時,會把數字解析成字符,而枚舉類中的字符為 WS YS TH 所以找不到,關於標題上寫的 0 1 沒問題,是點擊沒問題,但頁面也會報錯的.

  2. 正確的代碼




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM