javax.json.bind.JsonbException: неразрешенный тип для десериализации: класс java.lang.String - PullRequest
0 голосов
/ 12 декабря 2018

Имея DAO в моем API, например:

@Id
private String idhousing;
private String owner;
private String name;
private String city;
private String type;
private int price;
private String description_detailed;
private String description_short;
private byte[] photo;
private int guests;
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate init_date;
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate end_date;
private String address;

И имея точно такой же DAO в моем клиентском приложении, я попытался создать новое жилье:

HousingObject house = new HousingObject(id_housing,owner,name,city,type,precio,
                    detailed_description,short_description,bytes,guests,localinitDate,localendDate,address);

            ClientConfig config = new ClientConfig();
            Client client = ClientBuilder.newClient();

            WebTarget webResource = client.target("http://localhost:10505").path("housings");
            Invocation.Builder invocationBuilder = webResource.request(MediaType.APPLICATION_JSON);
            Response respuesta = invocationBuilder.post(Entity.entity(house, MediaType.APPLICATION_JSON));

Теперь япопросить получить все корпуса, и мой API:

@RequestMapping(value = "/housings", method = RequestMethod.GET)
public @ResponseBody List<HousingObject> getAllHousingsbyEmail(@RequestParam("email") String email){

    for (HousingObject h : daoHsg.findByowner(email)) {
        System.out.println("Printing data...");
        System.out.println("The id_housing is " + h.getId_housing());
        System.out.println("init date is " + h.getInit_date());
        System.out.println("end date is " + h.getEnd_date());
        System.out.println("max guests are " + h.getGuests());
        System.out.println("the address is " + h.getAddress());
        System.out.println("-------------------------------------------");
    }

Я вызываю aPI из моего клиента и пытаюсь распечатать некоторые атрибуты всех моих корпусов:

ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient();
WebTarget webResource = client.target("http://localhost:10505").
path("housings").queryParam("email",mail);
Invocation.Builder invocationBuilder  
= webResource.request(MediaType.APPLICATION_JSON);
Response respuesta = invocationBuilder.get(); 
int status = respuesta.getStatus();
HousingObject[] listHousings = respuesta.readEntity(HousingObject[].class);
for(HousingObject m : listHousings) {
    housingResult.add(m);
    System.out.println("-------------------------------------");
    System.out.println("printing data...");
    System.out.println("id_housing is " + m.getId_housing());
    System.out.println("init date is " + m.getInit_date());
    System.out.println("end date is " + m.getEnd_date());
    System.out.println("-------------------------------------");
    }

В основномесли я печатаю Список из моего API:

Printing data...
The id_housing is 22ec2cc3-ae8e-4436-8fed-397c225b38e2
init date is 2018-06-23
end date is 2019-07-03
max guests are 5
the address is Collarte
-------------------------------------------

Но если я печатаю некоторые атрибуты каждого объекта в Списке, из моего клиента, используя readEntity, если у Списка есть только 1 объект:

[2018-12-12T16:42:11.762+0100] [glassfish 5.0] [INFO] [] [] [tid: 
_ThreadID=29 _ThreadName=Thread-8] [timeMillis: 1544629331762] [levelValue: 
800] [[guests are 0]]

[2018-12-12T16:42:11.762+0100] [glassfish 5.0] [INFO] [] [] [tid: _ 
ThreadID=29 _ThreadName=Thread-8] [timeMillis: 1544629331762] [levelValue: 
800] [[price es 3]]

[2018-12-12T16:42:11.762+0100] [glassfish 5.0] [INFO] [] [] [tid: _ 
ThreadID=29 _ThreadName=Thread-8] [timeMillis: 1544629331762] [levelValue: 
800] [[type is es 3]]

[2018-12-12T16:42:11.762+0100] [glassfish 5.0] [INFO] [] [] [tid: 
_ThreadID=29 _ThreadName=Thread-8] [timeMillis: 1544629331762] [levelValue: 
800] [[owner is Carrillo@gmail.com]]

[2018-12-12T16:42:11.762+0100] [glassfish 5.0] [INFO] [] [] [tid: 
_ThreadID=29 _ThreadName=Thread-8] [timeMillis: 1544629331762] [levelValue: 
800] [[detailed_description is Good luck my friend]]

[2018-12-12T16:42:11.762+0100] [glassfish 5.0] [INFO] [] [] [tid: 
 _ThreadID=29 _ThreadName=Thread-8] [timeMillis: 1544629331762] [levelValue: 
 800] [[city is Madrid]]

[2018-12-12T16:42:11.762+0100] [glassfish 5.0] [INFO] [] [] [tid: 
_ThreadID=29 _ThreadName=Thread-8] [timeMillis: 1544629331762] [levelValue: 
800] [[short_description is wefwefw]]

[2018-12-12T16:42:11.762+0100] [glassfish 5.0] [INFO] [] [] [tid: 
_ThreadID=29 _ThreadName=Thread-8] [timeMillis: 1544629331762] [levelValue: 
800] [[address is null]]

[2018-12-12T16:42:11.762+0100] [glassfish 5.0] [INFO] [] [] [tid: _ 
ThreadID=29 _ThreadName=Thread-8] [timeMillis: 1544629331762] [levelValue: 
800] [[the id_housing is null]]

[2018-12-12T16:42:11.762+0100] [glassfish 5.0] [INFO] [] [] [tid: 
_ThreadID=29 _ThreadName=Thread-8] [timeMillis: 1544629331762] 
[levelValue:800] [[init date is null]]

[2018-12-12T16:42:11.762+0100] [glassfish 5.0] [INFO] [] [] [tid: 
_ThreadID=29 _ThreadName=Thread-8] [timeMillis: 1544629331762] [levelValue: 
800] [[end date is null]]

Так что я не знаю, что происходит.Если я запускаю микросервис с Почтальоном, список печатается без проблем со всеми ожидаемыми значениями.Если я распечатываю список из моей консоли API, я получаю ожидаемые значения из моей БД.Но по какой-то причине, когда список отправляется моему клиенту, многие атрибуты становятся нулевыми, а атрибуты guest по какой-то причине всегда меняют свое правильное значение на 0 (wtf).

Но забавно то, что если в моем Списке более одного корпуса, я даже не могу выполнить readEntityt, потому что выдается исключение:

Error deserializing object from entity stream. Caused by:
javax.json.bind.JsonbException: unresolved type for deserialization: 
class java.lang.String 

Есть какие-нибудь подсказки?

...