Spring boot настроить гипермедиа (HATEOAS) ответ и добавить дополнительный атрибут - PullRequest
0 голосов
/ 11 сентября 2018

Я работаю над spring-boot-1.5.8. Я хотел бы добавить ссылку гипермедиа (HATEOAS) в мой проект, и я ее реализовал. Но гиперссылки не в правильном формате. Вы можете найти проект здесь

Модель

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Person extends ResourceSupport {

private String firstName;
private String lastName;
private int age;
private String sex;
private String personUid;
private String personId;

}

Контроллер

    @GetMapping(value = "/getAllPersonHal")
public ResponseEntity<List<Person>> getPersonListHal(){
    List<PersonDTO> allPersons = personRepository.findAll();
    List<Person> personList = new ArrayList<>();
    for (PersonDTO personDTO : allPersons) {
        Person person = new Person();
        modelMapper.map(personDTO,person);
        person.add(linkTo(methodOn(PersonController.class).getPersonById(personDTO.getId())).withSelfRel());
        person.add(linkTo(methodOn(PersonController.class).getPersonById(personDTO.getId())).withRel("persons"));
        person.add(linkTo(methodOn(PersonController.class)
                .getPersonById(personDTO.getId()))
                .withRel("urn:persons"));
        personList.add(person);
    }
    return new ResponseEntity<>(personList, HttpStatus.OK);
}

При попадании в API, получая следующий ответ,

АКТУАЛЬНЫЙ ВЫХОД

[
{
"firstName": "Philip",
"lastName": "webb",
"age": 23,
"sex": "M",
"personUid": "1994",
"personId": "26",
"links": [
  {
    "rel": "self",
    "href": "http://localhost:9086/getPersonById/26"
  },
  {
    "rel": "persons",
    "href": "http://localhost:9086/getPersonById/26"
  },
  {
    "rel": "urn:persons",
    "href": "http://localhost:9086/getPersonById/26"
  }
]
}]

Ожидаемый результат

[
    {
    "firstName": "Philip",
    "lastName": "webb",
    "age": 23,
    "sex": "M",
    "personUid": "1994",
    "personId": "26",
    "links": {
      "self":{
        "href": "http://localhost:9086/getPersonById/26"
      },
      "persons":{
        "href": "http://localhost:9086/getPersonById/26"
      },
      "urn:persons":{
        "href": "http://localhost:9086/getPersonById/26"
      }
    }
    }]

Я не уверен, что мне нужно сделать, чтобы получить ожидаемый результат. Кроме того, наряду с атрибутом «href» и ссылками я хотел бы добавить еще немного информации о ссылках, таких как тип (GET / POST / PUT), заголовки, accept-type и т. Д.

Любой намек или помощь должны быть заметны.

...