проверь мой ответ.

ользую данные по весне

DonationRequest

@Data
@Entity
@Table(name="donation_request",schema="public")
public class DonationRequest {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="donation_request_id")
    Integer donationRequestId;

    @Column(name="expiry_datetime")
    Date expiryDatetime;

    @Column(name="blood_group")
    String bloodGroup;

    @Column(name="no_of_bottles")
    String noOfBottles;

    @OneToOne
    @JoinColumn(name="hospital_id")
    Hospital hospital;

    @OneToOne
    @JoinColumn(name="user_data_id")
    UserData requester;

    @Column(name="active")
    Boolean active;

}

больница

@Data
@Entity
@Table(name="hospital",schema="public")
public class Hospital {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="hospital_id")
    Integer hospitalId;

    @Column(name="name")
    String name;

    @Column(name="address")
    String address;

    @Column(name="loc",columnDefinition = "geometry")
    Point loc;

}

Теперь у меня есть Android-клиент, который имеет те же определения классов, как указано выше. Больницы кэшируются при запуске на Android-клиенте. Теперь я хочу создать сущность donationRequest на сервере. Я могу легко это сделать, разместив json объекта donationRequest в / api / donationRequests. этот JSON также содержит объект больницы. Но вновь созданный запрос на пожертвование и больница не связаны между собой.

Следующий тип json в почтальоне не создает ссылку:

{
    "bloodGroup":"AB+",
    "hospital":{
        "hospitalId":1
    }
}

Я знаю, что следующий json создает ссылку:

{
    "bloodGroup":"AB+",
    "hospital":"/api/hospitals/1"
}

Мой вопросКак я могу создать ссылку, используя первый тип JSON как это естественный способ сериализации объекта dontaionRequest от клиента Android? Также я хочу, чтобы больницы были выставлены через / API / больницы, такудаление этого ресурса отдыха не вариант.

Ответы на вопрос(2)

Решение Вопроса

rter и определения пользовательского типа контента, который может быть любым, кроме стандартного (я использовал application / mjson):

MHttpMessageConverter.java

public class MHttpMessageConverter implements HttpMessageConverter<Object>{
    @Override
    public boolean canRead(Class<?> aClass, MediaType mediaType) {
        if (mediaType.getType().equalsIgnoreCase("application")
                && mediaType.getSubtype().equalsIgnoreCase("mjson"))
            return true;
        else
            return false;
    }

    @Override
    public boolean canWrite(Class<?> aClass, MediaType mediaType) {
        return false;
    }

    @Override
    public List<MediaType> getSupportedMediaTypes() {
        return new ArrayList<>(Arrays.asList(MediaType.APPLICATION_JSON));
    }

    @Override
    public Object read(Class<?> aClass, HttpInputMessage httpInputMessage) throws IOException, HttpMessageNotReadableException {
        ObjectMapper mapper = new ObjectMapper();
        Object obj = mapper.readValue(httpInputMessage.getBody(),aClass);
        return obj;
    }

    @Override
    public void write(Object o, MediaType mediaType, HttpOutputMessage httpOutputMessage) throws IOException, HttpMessageNotWritableException {

    }
}

CustomRestConfiguration.java

@Configuration
public class CustomRestConfiguration extends RepositoryRestConfigurerAdapter {

    @Override
    public void configureHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
        messageConverters.add(new MHttpMessageConverter());
    }
}
 ArslanAnjum19 сент. 2017 г., 11:57
С пользовательским контроллером мне придется делать это со всеми сущностями отдельно.
 Cepr018 сент. 2017 г., 19:20
Довольно забавное решение. Пользовательский контроллер не будет проще?

HATEOAS, Чтобы ссылаться на связанные ресурсы, мы должны использовать ссылки на них:

Сначала создайте больницу

POST /api/hospitals
{
    //...
}

ответ

{
    //...
    "_links": [
        "hostpital": "http://localhost/api/hospitals/1",
        //...
    ]
}

Затем получите ссылку на больницу (или на себя) и добавьте ее в полезную нагрузку donationRequests.

POST /api/donationRequests
{
    "bloodGroup":"AB+",
    "hospital": "http://localhost/api/hospitals/1"
}

Другой подход - создать первые «пожертвования» без больницы

POST /api/donationRequests
{
    //...
}

ответ

{
    //...
    "_links": [
        "hostpital": "http://localhost/api/donationRequests/1/hospital"
        //...
    ]
}

затем положить больницу вdonationRequests/1/hospital используя текстовую ссылку на больницу в вашей полезной нагрузке (обратите внимание на Content-Type: text / uri-list)

PUT http://localhost/api/donationRequests/1/hospital (Content-Type: text/uri-list)
http://localhost/api/hospitals/1

Информация:Ресурсы репозитория - ресурс ассоциации

ОБНОВИТЬ

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

 ArslanAnjum18 сент. 2017 г., 10:37
Две вещи: - 1 - больницы уже созданы. Я просто хочу сослаться 2. Я уже говорил, что знаю, что ссылки на остальные ресурсы можно использовать для создания ссылок на ассоциации. Я хочу знать, есть ли другое решение?
 ArslanAnjum18 сент. 2017 г., 11:34
проверь мой ответ.
 Cepr018 сент. 2017 г., 10:39
@ArslanAnjum таким образом - только руководство

Ваш ответ на вопрос