Как десериализовать сообщения application / json + hal с симулированным клиентом? - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь десериализовать свое сообщение application / json + hal из моего db-сервиса, созданного модулем jpa-data-rest Spring.io, но я не могу десериализовать это сообщение как java-модель в моем бизнесе.Служба логики.

Я попытался обновить свой проект в соответствии со следующим учебным пособием: https://reflectoring.io/accessing-spring-data-rest-with-feign/.

Если я получаю доступ к ресурсу rest с помощью симулированного клиента, возвращая строку в конце, он успешно возвращаетсястроковый ответ моего db-сервиса.Если я возвращаю ответ в виде ресурсов, я получаю пустой объект Java.

В качестве теста я также использовал свои классы сущностей jpa из моего db-сервиса в качестве класса шаблона десериализации, который также возвращает пустой объект Java.

Модель, используемая для десериализации:


public abstract class AbstractNationModelBase implements Serializable {

    private String uuid;

    public AbstractNationModelBase(String uuid) {
        this.uuid = uuid;
    }


    public AbstractNationModelBase() {
    }

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

[...]
}


public class UserModel extends AbstractNationModelBase implements Serializable {


    private String username;

    private String password;

    private boolean isAdmin;


    public UserModel(String uuid, String username, String password, boolean isAdmin) {
        super(uuid);
        this.username = username;
        this.password = password;
        this.isAdmin = isAdmin;
    }

    public UserModel(String username, String password, boolean isAdmin) {
        this.username = username;
        this.password = password;
        this.isAdmin = isAdmin;
    }

    public UserModel(){
        super();
    }


@FeignClient(value="nation-database-service")
public interface UserFeignProxy {



    @RequestMapping(method = RequestMethod.GET,value="/users")
    Resources<UserModel> GetAllUsersByModel();
}

Правильный текст ответа:


{
    "_embedded": {
        "users": [
            {
                "uuid": "815b53b0-cd33-4813-bce3-a7c4989b0b10",
                "username": "Testiman",
                "password": "peter_test",
                "admin": true,
                "_links": {
                    "self": {
                        "href": "http://localhost:8081/users/1"
                    },
                    "user": {
                        "href": "http://localhost:8081/users/1"
                    }
                }
            }
        ]
    },
    "_links": {
        "self": {
            "href": "http://localhost:8081/users{?page,size,sort}",
            "templated": true
        },
        "profile": {
            "href": "http://localhost:8081/profile/users"
        },
        "search": {
            "href": "http://localhost:8081/users/search"
        }
    },
    "page": {
        "size": 20,
        "totalElements": 1,
        "totalPages": 1,
        "number": 0
    }
}

Результат должен состоять в том, чтобы десериализовать его в мойМодельный класс.Буду признателен, если кто-нибудь поделится своим опытом.

1 Ответ

0 голосов
/ 19 апреля 2019

Я нашел решение после проверки следующей проблемы github:

https://github.com/spring-cloud/spring-cloud-openfeign/issues/127

Я добавил пользовательский AbstractJackson2HttpMessageConverter, как упомянуто в выпуске

...