2017-01-24 11 views
0

У меня есть класс с несколькими членами, а также связанные с ними сеттеров и добытчиками:Как сделать POST через RestTemplate класс со встроенными членами?

public class Tester implements Serializable { 
    @Column(name="ID", nullable=false, unique=true) 
    @Id 
    @GeneratedValue(generator="LOCATION_FACILITYTYPE_ID_GENERATOR") 
    @org.hibernate.annotations.GenericGenerator(name="LOCATION_FACILITYTYPE_ID_GENERATOR", strategy="native") 
    private int ID; 

    @Column(name="Value", nullable=false, unique=true, length=4) 
    private String value; 

    @Column(name="Name", nullable=false, unique=true, length=8) 
    private String name; 

    @ManyToOne(targetEntity=location.FacilityType.class, fetch=FetchType.LAZY)  
    @org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.LOCK}) 
    @JoinColumns({ @JoinColumn(name="FacilityTypeID", referencedColumnName="ID", nullable=false) }) 
    private location.FacilityType facility; 

В JUnit, я пытаюсь проверить создание Tester элемент:

Tester trythis = new Tester(); 
    trythis.setName("Herewe"); 
    trythis.setValue("wow1"); 
    Tester jnode = restTemplate.postForObject(TestBase.URL + "tester/", trythis, Tester.class); 

Это работает, как ожидалось , Тем не менее, если я использую такой код, чтобы включить встроенный элемент:

FacilityType ft = new FacilityType();  
    ft.setValue("AL"); 
    ft.setName("2adamlec"); 
    Tester trythis = new Tester(); 
    trythis.setName("Herewe"); 
    trythis.setValue("wow1"); 
    trythis.setFacility(ft); 
    Tester jnode = restTemplate.postForObject(TestBase.URL + "tester/", trythis, Tester.class); 

где внедренный элемент со значением = AL пока не появится в базе данных, я все еще получаю новую строку, созданную в таблице Tester .. , но столбцы значений и имени в тесте заполняются значениями (AL и 2adamlec), определенными для FacilityType.

Обратите внимание, что мы используем инфраструктуру JPARepository для FacilityType и Tester. Таким образом, функции CRUD обрабатываются «под обложками», и я не могу отлаживать обработку POST. Интересно, связано ли это с тем фактом, что данные GET для Tester возвращают только примитивные поля в ответе JSON, поскольку для FacilityType не существует проекции.

Я делаю что-то неправильно, чтобы поля типа FacilityType сохранялись вместо требуемых полей тестера в таблице Tester?

ответ

0

Короткий ответ: при создании элемента вам необходимо предоставить данные в том же формате JSON, который ожидает от него сервер. Если у вас встроенный класс, вам нужно создать класс, в котором член объекта является строкой для размещения URL-адреса, а затем установите этот член в URL-адрес, соответствующий существующему экземпляру встроенного класса. На приемном конце, необходимо также новый класс, как это:

public class FMT_Tester_RCV { 
    public FMT_Tester_RCV() { } 

    private String value; 
    private String name; 
    private Integer id; 
    private Integer ormid; 
    private JsonNode _links; 

, где вы можете путешествовать вниз JsonNode, чтобы получить ссылку на встроенный экземпляр класса.