Java Spring Boot: Rest Добавление дополнительных сведений в JSON - PullRequest
0 голосов
/ 05 сентября 2018

Я новичок в Java Spring Boot и не знаю, как объяснить свою проблему в ближайшее время, возможно, поэтому я не нашел результатов в Google.

Я использую Java Spring Boot для REST Api. Вот результаты, которые я сейчас получаю:

{
  "_embedded" : {    
    "dimensionAttributeValue" : [ {   
      "chrValue" : "Nopens, Jakob",    
      "intValue" : null,    
      "decValue" : null,    
      "datValue" : null,    
      "startDate" : null,    
      "_links" : {    
        "self" : {    
          "href" : "http://localhost:8080/dimensionAttributeValues/18995"    
        },    
        "dimensionAttributeValue" : {    
          "href" : "http://localhost:8080/dimensionAttributeValues/18995"    
        },    
        "dimensionAttributeID" : {    
          "href" : "http://localhost:8080/dimensionAttributeValues/18995/dimensionAttributeID"    
        },    
        "lstValue" : {    
          "href" : "http://localhost:8080/dimensionAttributeValues/18995/lstValue"    
        },    
        "masterDataID" : {    
          "href" : "http://localhost:8080/dimensionAttributeValues/18995/masterDataID"    
        }    
      }    
    },...

Мне бы хотелось получить дополнительную информацию для полей отношений, как в следующем примере:

{
  "_embedded" : {    
    "dimensionAttributeValue" : [ {   
      "chrValue" : "Nopens, Jakob",    
      "intValue" : null,    
      "decValue" : null,    
      "datValue" : null,    
      "startDate" : null,  
      "dimensionAttributeID" : 5 <--- Like thath
      "_links" : {    
        "self" : {    
          "href" : "http://localhost:8080/dimensionAttributeValues/18995"    
        },    
        "dimensionAttributeValue" : {    
          "href" : "http://localhost:8080/dimensionAttributeValues/18995"    
        },    
        "dimensionAttributeID" : {    
          "href" : "http://localhost:8080/dimensionAttributeValues/18995/dimensionAttributeID"    
        },    
        "lstValue" : {    
          "href" : "http://localhost:8080/dimensionAttributeValues/18995/lstValue"    
        },    
        "masterDataID" : {    
          "href" : "http://localhost:8080/dimensionAttributeValues/18995/masterDataID"    
        }    
      }    
    },...

Есть ли простой способ добавить эту информацию, возможно, не в раздел _links, а как обычный атрибут и без записи контроллера?


Edit:

Часть класса модели, это тот, кто смотрит в поле:

@ManyToOne
@JoinColumn(name = "DimensionAttribute_ID")
private DimensionAttribute dimensionAttribute;

В базе данных хранится только идентификатор DimensionAttribute.


Редактировать 2:

Таблица DimensionAttributeValue:

| DimensionAttributeValue_ID | ChrValue | ... | DimensionAttribute_ID | ...
----------------------------------------------------------------------------
| 1                          | "some"   | ... | 5                     |

Таблица DimensionAttribute;

| DimensionAttribute_ID | name | ...
-------------------------------------
| 5                     | "ok" | ...

Так что приятно, что я получил ссылку на объект. Но мне также нравится атрибут DimensionAttribute_ID.


Редактировать 3:

DimensionAttributeValue:

@Entity
@Table(name = "DimensionAttributeValue")
public class DimensionAttributeValue {

    @Id
    @GeneratedValue
    @Column(name = "DimensionAttributeValue_ID")
    private long dimensionAttributeValueID;

    @ManyToOne
    @JoinColumn(name = "DimensionAttribute_ID")
    private DimensionAttribute dimensionAttributeID;

    @ManyToOne
    @JoinColumn(name = "MasterData_ID")
    private MasterData masterDataID;

    @Column (name = "ChrValue")
    private String chrValue;

    @Column (name = "IntValue")
    private String intValue;

    @Column (name = "DecValue")
    private String decValue;

    @Column (name = "DatValue")
    private String datValue;

    @ManyToOne
    @JoinColumn (name = "LstValue")
    private DimensionAttributeList lstValue;

    @Column (name = "StartDate")
    private Date startDate;

    public DimensionAttributeValue() {
    }

    public DimensionAttributeValue(DimensionAttribute dimensionAttributeID, MasterData masterDataID, String chrValue, String intValue, String decValue, String datValue, DimensionAttributeList lstValue, Date startDate) {
        this.dimensionAttributeID = dimensionAttributeID;
        this.masterDataID = masterDataID;
        this.chrValue = chrValue;
        this.intValue = intValue;
        this.decValue = decValue;
        this.datValue = datValue;
        this.lstValue = lstValue;
        this.startDate = startDate;
    }
...

DimensionAttribute:

@Entity
@Table (name = "DimensionAttribute")
public class DimensionAttribute {

    @Id
    @GeneratedValue
    @Column (name = "DimensionAttribute_ID")
    private long dimensionAttributeID;

    @OneToOne
    @JoinColumn(name = "Dimension_ID")
    private Dimension dimensionID;

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

    @Column(name = "Description")
    private String description;

    @Column(name = "DataType")
    private String dataType;

    @Column(name = "HasHistory")
    private Boolean hasHistory;

    @Column(name = "IsDiscrete")
    private Boolean isDiscrete;

    @Column(name = "HasTrigger")
    private Boolean hasTrigger;

    @Column(name = "IsMandatory")
    private Boolean isMandatory;

    @Column(name = "AllowInterface")
    private Boolean allowInterface;

    @Column(name = "IsReadOnly")
    private Boolean isReadOnly;
...

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Если у вас есть доступ к коду и вы можете его редактировать, то в классе, возвращаемом из контроллера, добавьте желаемое свойство. Э.Г.

class JSONObject {
 .... // old properties

  // your new property with getter and setter
  private Long dimensionAttributeID;

  public Long getDimensionAttributeID() {
     return dimensionAttributeID;
  }

  public Long setDimensionAttributeID(Long dimensionAttributeID) {
     this.dimensionAttributeID = dimensionAttributeID;
  }
}

Если вы можете вызвать получатель DimensionAttributeValue , и у идентификатора есть получатель, тогда у вашего DimensionAttributeValue есть идентификатор.

Перейти к месту, где создается объект возвращаемого класса и установить свойство со значением получателя из DimensionAttributeValue , как показано ниже.

jsonObjec.setDimensionAttributeID(dimensionAttributeValue.getDimensionAttributeID().getDimensionAttributeID());

Надеюсь, это поможет.

0 голосов
/ 05 сентября 2018

Стандартный способ сделать REST-Apis в Spring-boot - выставить контроллер REST в вашем приложении, пометив свой контроллер как @RestController

При этом стандартным способом получения Inputs вашего метода и возврата Response из вашего метода будет использование Java-объекта, и он достигнет вызывающего в формате JSON.

Итак, я предполагаю, что вы получаете ввод JSON и вам нужно ввести еще несколько значений. В этом случае вам придется принимать JSON входные данные в форме объектов Java, а затем вы можете использовать методы setter для дальнейшего включения любых значений.

Просто псевдокод .. .

public MyJavaObject {

  // I assume here that you wanted to inject a link in the JSON which itself is set of Objects
  private List<LinkObject> linkObjectList;

}

, а затем получите linkObjectList от вашего объекта и установите другой LinkObject .. Таким образом, когда вы поворачиваете java-объекты на JSON, вы можете видеть ваше добавление там ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...