com.fasterxml.jackson.databind.JsonMappingException: campo no admitido: HourOfDay

       ¡Encontré una excepción recientemente, que es la excepción de la conversión json!

com.fasterxml.jackson.databind.JsonMappingException: Campo no admitido: HourOfDay Este es el mensaje de error principal. No se publicarán otros desbordamientos de pila. Mirando hacia atrás, esta excepción se siente relativamente baja. Cuando la vi por primera vez, realmente no tenía ni idea. Sentí que este tipo de error es un error extraño. Eché un vistazo y no sé en qué línea de código informó el error, la excepción en la pila ¡Todos los paquetes jar citados son molestos!

No puede encontrar la razón del problema, no lo piense, debe haber algunas cosas muy triviales que ha pasado por alto, especialmente este tipo de conversión json o eliminación transversal.

No lo pienses, tómate un descanso y míralo al día siguiente, resulta. . . . Este error es tan largo, todavía no he encontrado el problema, ¡jajaja!

Hablemos de cómo surgió mi error bajo.

En primer lugar, quiero consultar el campo de tiempo en una tabla de datos MySQL. El receptor usa LocalDate. LocalDate es una clase de fecha que se usa comúnmente en la actualidad. Si usa a menudo la clase de contenedor de tiempo, encontrará que muchos de los datos de Date Los métodos están desactualizados. El año, mes y día están bien encapsulados en LocalDate, lo que facilita su obtención y cálculo. ¡Aquí hay una castaña!

public static void main(String[] args) throws Exception {

        LocalDate date = LocalDate.now();
        int year = date.getYear();
        int month = date.getMonthValue();

//       举个栗子
        // 月份添加
        LocalDate endDate = date.plusMonths(58);
        //月份相减
        long l = ChronoUnit.MONTHS.between(date, endDate);


        System.out.println("Year:" + year + "  Month:" + month);
        System.out.println("年份:" + endDate.getYear() + " 月份差:" + l);

    }

Puede ver que la adquisición de año, mes y día, suma y resta, se puede calcular fácilmente.Si desea saber más sobre esto, puede consultar el código fuente de LocalDate.

Volviendo a la pregunta de hace un momento, usar LocalDate para recibir el campo del formato de hora, naturalmente, no tiene ningún problema. Si lo intenta, la hora se devolverá correctamente.

Sin embargo, hay una operación más más adelante, ¡y debe regresar a la parte frontal!

Para las interacciones de front-end y back-end, Spring se ha encapsulado relativamente bien, y el retorno del formato de tiempo es naturalmente definible. Creo que todos lo saben, ¡jejeje!

Simplemente agregue un comentario en el campo @JsonFormat (patrón = "yyyy-MM-dd HH: mm: ss", timezone = "GMT + 8") y, naturalmente, puede devolver el formato que desee.

Luego, apareció el error, la conversión de json falló, campo no admitido: HourOfDay. . . .

¿Por qué es esto?

¡Eche un vistazo a la estructura de LocalDate y encontrará que este problema es tan bajo!

¡original!

original. . .

¡LocalDate solo tiene año, mes y día!

¡No hay horas, minutos y segundos en absoluto!

¡Por supuesto que no puede convertir las horas! Naturalmente, informará sobre el campo No admitido: HourOfDay!

Entonces, para resolver este problema, simplemente use Date para recibir o devolver el año, mes y día de la interfaz. Cambie el comentario @JsonFormat (pattern = "yyyy-MM-dd", timezone = "GMT + 8"), y está bien.

Por supuesto, esto depende de los requisitos de la empresa.

Recuerde: cuanto más extraño sea el problema, más tranquilo debe estar. Paso a paso, mire un poco, no se salte el proceso ~

Por supuesto, un destello de luz es muy importante, jaja.

Muy bien, charlemos aquí, aprendamos juntos y progresemos juntos ~

 

     

Supongo que te gusta

Origin blog.csdn.net/zsah2011/article/details/111030706
Recomendado
Clasificación