Heim  >  Fragen und Antworten  >  Hauptteil

Rufen Sie ein JSON-Array oder ein JSON-Objekt mithilfe der JPA-Projektion und der DTO-Schnittstelle ab

Ich habe eine DTO-Schnittstelle, die Joins verwendet, um Daten aus verschiedenen Tabellen abzurufen. Ich habe eine DTO-Schnittstelle mit solchen abstrakten Getter-Methoden erstellt.

public interface HRJobsDTO {

    String getEditorName();

    String getEditorId();

    String getBillingMonth();

    Integer getEditorWordCount();

    Integer getJobCount();

    Integer getEmployeeGrade();

    Float getGrossPayableAmount();

    Float getJobBillingRate();

    Float getTaxDeduction();

    Float getTaxDeductionAmount();

    Float getNetPayableAmount();

    String getInvoiceStatus();

    String getFreelanceInvoiceId();
}

In dieser Schnittstelle verwendet meine Methode getFreelanceInvoiceId(); die json_arraygg-Funktion von MySQL, um ein JSON-Array zurückzugeben. Ich habe den Datentyp in String, String[] und Arraylist geändert, aber in meiner Antwort wird in etwa Folgendes zurückgegeben

"freelanceInvoiceId": "["4af9e342-065b-4594-9f4f-a408d5db9819/2022121-95540", "4af9e342-065b-4594-9f4f-a408d5db9819/2022121-95540", "4af9e342-065b-4594-9f4f-a408d5db9819/20221215-53817", "4af9e342-065b-4594-9f4f-a408d5db9819/20221215-53817", "4af9e342-065b-4594-9f4f-a408d5db9819/20221215-53817"]"

Gibt es eine Möglichkeit, nur Arrays ohne Backslashes zurückzugeben?

P粉317679342P粉317679342297 Tage vor455

Antworte allen(1)Ich werde antworten

  • P粉463291248

    P粉4632912482023-12-28 10:29:22

    您可以使用 JPA 中的@Converter(也由 hibernate 实现)

    @Converter
    public class List2StringConveter implements AttributeConverter<List<String>, String> {
    
        @Override
        public String convertToDatabaseColumn(List<String> attribute) {
            if (attribute == null || attribute.isEmpty()) {
                return "";
            }
            return StringUtils.join(attribute, ",");
        }
    
        @Override
        public List<String> convertToEntityAttribute(String dbData) {
            if (dbData == null || dbData.trim().length() == 0) {
                return new ArrayList<String>();
            }
    
            String[] data = dbData.split(",");
            return Arrays.asList(data);
        }
    }

    并在 pojo 类中引用它,如下所示

    @Column(name="freeLanceInvoiceId")
    @Convert(converter = List2StringConveter.class)
    private List<String> tags=new ArrayList<>();

    Antwort
    0
  • StornierenAntwort