Response.ok с метаданными

В моем сервисном проекте RESTful у меня есть метод, добавляющий запись (новый человек):

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

@PostMapping(value = "/addPerson")
public Response dodajOsobe(InputStream inputStream) {
    return osMgr.dodajOsobe(inputStream);
}

В сервисе:

public Response dodajOsobe(InputStream inputStream) {

    Response response = null;
    try {
        String input = misc.InputStreamToString(inputStream);
        Integer id = dodajOsobe(input);
        response = Response.ok("New person added").build();
    } catch (Exception e) {
        response = Response.serverError().entity("Nie udało się dodać osoby. Przyczyna: " + e.getLocalizedMessage()).build();
    }
    return response;
}

Возвращает объект "Ответ" со статусом OK, если все в порядке:

response = Response.ok("New person added").build();

После выполнения результат в браузере выглядит так:

{
    "statusType": "OK",
    "entity": "New person added",
    "entityType": "java.lang.String",
    "metadata": {},
    "status": 200
}

Я хочу вернуть идентификатор человека. Я знаю, что могу сделать это в «сущности», но я хочу иметь там перерабатываемую информацию. Есть поле «метаданные», и я не буду помещать туда идентификатор записи, например:

{
    "statusType": "OK",
    "entity": "New person added",
    "entityType": "java.lang.String",
    "metadata": {"id":112233},
    "status": 200
}

Как это сделать??


person Olek    schedule 23.07.2018    source источник
comment
Ваш вопрос сбивает с толку. Что именно ты пытаешься сделать? Пожалуйста, также добавьте свой код вашего объекта и весь остальной метод контроллера.   -  person grimbo    schedule 23.07.2018
comment
я добавил больше информации   -  person Olek    schedule 23.07.2018


Ответы (2)


Вы можете создать собственный класс ответа, например.

class OkResponse {
  private EntityId id; //or something else
  private String message;
}

и вернуть его экземпляр в качестве ответа.

person piradian    schedule 23.07.2018
comment
Хорошо, я использую javax.ws.rs.core.Response. Возможно ли это сделать с этим объектом? - person Olek; 23.07.2018
comment
Да, см., например. этот вопрос: stackoverflow.com/questions/36152231/ - person piradian; 23.07.2018

Наконец, я добавляю метод заголовка:

        response = Response.ok("New record added")
                .header("rezerwacjaId", rezId)
                .build();

И получил JSON:

{
  "entity": "New record added",
  "entityType": "java.lang.String",
  "metadata": {
    "rezerwacjaId": [
      77754
    ]
  },
  "status": 200,
  "statusType": "OK"
}
person Olek    schedule 31.07.2018