Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从数值反序列化为int(错误-没有int/int参数构造函数/工厂方法从数值反序列化)_Java - Fatal编程技术网

Java 从数值反序列化为int(错误-没有int/int参数构造函数/工厂方法从数值反序列化)

Java 从数值反序列化为int(错误-没有int/int参数构造函数/工厂方法从数值反序列化),java,Java,我有两个班,一个是升级班,另一个是升级班。Zona和hava都犯了这个错误 这是我想要保存在数据库中的json请求 "promotionZona":{"localidad":{"latitud":0.0,"longitud":0.0},"provincia":{},"todoElPais":true,"promotion":0,"promoZona

我有两个班,一个是升级班,另一个是升级班。Zona和hava都犯了这个错误

这是我想要保存在数据库中的json请求

"promotionZona":{"localidad":{"latitud":0.0,"longitud":0.0},"provincia":{},"todoElPais":true,"promotion":0,"promoZonaId":0}
您可以看到促销,但我无法将其保存到我的数据库中,我遇到了这样一个错误:

2020-10-25 20:06:50.113  INFO 5550 --- [           main] o.s.s.quartz.SchedulerFactoryBean        : Starting Quartz Scheduler now
2020-10-25 20:06:50.113  INFO 5550 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_NON_CLUSTERED started.
2020-10-25 20:06:50.133  INFO 5550 --- [           main] a.c.b.s.s.SuipBackofficeApplication      : Started SuipBackofficeApplication in 31.486 seconds (JVM running for 57.573)
2020-10-25 20:06:50.323  INFO 5550 --- [           main] org.apache.jasper.servlet.TldScanner     : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
2020-10-25 20:06:50.419  INFO 5550 --- [           main] org.apache.coyote.ajp.AjpNioProtocol     : Starting ProtocolHandler ["ajp-nio-8109"]
2020-10-25 20:06:50.430  INFO 5550 --- [           main] org.apache.catalina.startup.Catalina     : Server startup in [47,370] milliseconds
2020-10-25 20:07:21.325  INFO 5550 --- [nio-8180-exec-3] o.a.c.c.C.[.[.[/suip-backoffice]         : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-10-25 20:07:21.327  INFO 5550 --- [nio-8180-exec-3] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-10-25 20:07:21.413  INFO 5550 --- [nio-8180-exec-3] o.s.web.servlet.DispatcherServlet        : Completed initialization in 86 ms
2020-10-25 20:07:21.759  WARN 5550 --- [nio-8180-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `us.com.model.Promocion` (although at least one Creator exists): no int/Int-argument constructor/factory method to deserialize from Number value (0); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `us.com.model.suipportalmodel.model.Promotion` (although at least one Creator exists): no int/Int-argument constructor/factory method to deserialize from Number value (0)
 at [Source: (PushbackInputStream); line: 1, column: 2650] (through reference chain: ar.com.model.suipportalmodel.dto.PromotionDTO["promotionZona"]->java.lang.Object[][0]->.PromotionZona["promotion"])]
我的实体促销Zona:

@Table(name="promotion_zona")
public class PromotionZona implements Serializable {


   @Id 
   @GeneratedValue(strategy = GenerationType.IDENTITY)//9
   @Column(name = "id_promotion_zona", unique = true, nullable= false)
   private Long idPromotionZona;
   
   
   @Column(name="todo_el_pais")
   private Boolean todoElPais;
   
   @Column(name="fecha_desde_solicitada")
   private Date fechaDesdeSolicitada;
   
   @Column(name="fecha_hasta_solicitada")
   private Date fechaHastaSolicitada;
   
   @Column(name="fecha_desde_confirmada")
   private Date fechaDesdeConfirmada;
   
   @Column(name="fecha_hasta_confirmada")
   private Date fechaHastaConfirmada;
   
   @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
   @JoinColumn(name="id_localidad",nullable=false)
   private Localidad localidad;
   
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "id_provincia", nullable = true)
   private Provincia provincia;
   
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name="id_promocion",nullable=false)
   private Promotion promotion; ```

当spring mvc未能将json数据反序列化到类
升级
时会发生错误,具体来说,它在
升级:0->类升级实例
时失败,因为
升级
是一个类,它必须看起来像这样:

public class Promotion {

    private int field1;
    
    //getters and setters
}
然后在json数据中,它应该是:

"promotion":{"filed1": 0}
所以有几种方法可以解决这个问题:

  • 显然,您可以将您的请求更改为:
  • 将int参数构造函数添加到类
    升级
  • 添加自定义的
    JsonDeserializer

  • 当spring mvc未能将json数据反序列化到类
    升级
    时会发生错误,具体来说,它在
    升级:0->类升级实例
    时失败,因为
    升级
    是一个类,它必须看起来像这样:

    public class Promotion {
    
        private int field1;
        
        //getters and setters
    }
    
    然后在json数据中,它应该是:

    "promotion":{"filed1": 0}
    
    所以有几种方法可以解决这个问题:

  • 显然,您可以将您的请求更改为:
  • 将int参数构造函数添加到类
    升级
  • 添加自定义的
    JsonDeserializer

  • 不确定是否相关,但您的实体中有
    promotion
    ,请求中有
    promotion
    。这不相关,我现在更改,但您的json错误实际上不是有效的json。您需要将其包装在{}中以使其有效。不确定是否相关,但您的实体中有
    promotion
    ,请求中有
    promotion
    。它不相关,我现在更改,但您的json错误实际上不是有效的json。您需要将其包装在{}中以使其有效。
    public class PromotionJsonDeserializer extends JsonDeserializer<Promotion> {
        @Override
        public Promotion deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
            if(jsonParser == null)return null;
    
            Promotion promotion = new Promotion();
            promotion.setField1(Integer.valueOf(jsonParser.getText()));
            return promotion;
        }
    }
    
    
    
    @Table(name="promotion_zona")
    public class PromotionZona implements Serializable {
    
       ...
     
       @JsonDeserialize(using = PromotionJsonDeserializer.class)
       @ManyToOne(fetch = FetchType.LAZY)
       @JoinColumn(name="id_promocion",nullable=false)
       private Promotion promotion;