Не удалось десериализовать значение LocalDate в REST WS - PullRequest
0 голосов
/ 13 февраля 2019

Я использую очень простые REST WS с SpringBoot и PostMan для отправки, получения и отображения данных.Проблема в том, что, кажется, есть проблема с десериализацией значения Date, и по какой-то причине он принимает только этот формат yyyy-mm-dd (разделенный черточками).

Так, например, если я отправлю следующееданные из Postman, я получаю ответ без проблем:

{  
   "server":{  
      "address":"url",
      "port":2555525
   },
   "date":"2019-02-13"
}

Однако, если я сделаю следующее ( дата значения без черточек ):

{  
   "server":{  
      "address":"url",
      "port":2555525
   },
   "date":"20190213"
}

Я получаю следующую ошибку:

{
    "timestamp": 1550046097893,
    "status": 400,
    "error": "Bad Request",
    "message": "JSON parse error: Cannot deserialize value of type `java.time.LocalDate` from String \"20190213\": Failed to deserialize java.time.LocalDate: (java.time.format.DateTimeParseException) Text '20190213' could not be parsed at index 0; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.LocalDate` from String \"20190213\": Failed to deserialize java.time.LocalDate: (java.time.format.DateTimeParseException) Text '20190213' could not be parsed at index 0\n at [Source: (PushbackInputStream); line: 6, column: 9] (through reference chain: com.restws.webservices.model.Admin[\"date\"])",
    "path": "/v3/admin/device"
}

Я хотел бы добиться возможности десериализации даты независимо от формата, введенного в PostMan.Есть ли способ сделать это?

Вот мой контроллер:

@Controller
@RequestMapping("/v3/admin/")
public class AdminController {

    Logger logger = LoggerFactory.getLogger(AdminController.class);

    @Autowired
    private ObjectMapper objectMapper;

    @RequestMapping(method = RequestMethod.POST, value = "/device", consumes ="application/json")
    public ResponseEntity putDevice(@RequestBody Admin admin) throws IOException {

        logger.info(admin.toString());
        String adminString = admin.toString();
        return new ResponseEntity<>(adminString, HttpStatus.OK);

    }
}

И POJO:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Admin {

    @JsonProperty("server")
    private Server server;

    @JsonProperty("date")
    private LocalDate date;

    public Admin() {
    }


    public Server getServer() {
        return server;
    }

    public void setServer(Server server) {
        this.server = server;
    }

    public LocalDate getDate() {
        return date;
    }

    public void setDate(LocalDate date) {
        this.date = date;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this).append("server", server).append("date", date).toString();
    }
}

//

 public class Server {

        @JsonProperty("address")
        private String address;

        @JsonProperty("port")
        private int port;

        public Server() {
        }

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }

        public int getPort() {
            return port;
        }

        public void setPort(int port) {
            this.port = port;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;

            if (o == null || getClass() != o.getClass()) return false;

            Server server = (Server) o;

            return new EqualsBuilder().append(port, server.port).append(address, server.address).isEquals();
        }

        @Override
        public int hashCode() {
            return new HashCodeBuilder(17, 37).append(address).append(port).toHashCode();
        }

        @Override
        public String toString() {
            return new ToStringBuilder(this).append("address", address).append("port", port).toString();
        }
    }

1 Ответ

0 голосов
/ 13 февраля 2019

Вы можете попробовать написать собственный JsonDeserializer для обработки десериализации даты в форматах, которые вы хотите принять: Стратегия сериализации JSON для дат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...