java 使用JPA投影和DTO接口检索JSON数组或JSON对象

smtd7mpg  于 2022-12-21  发布在  Java
关注(0)|答案(1)|浏览(123)

我有一个DTO接口,它使用连接从不同的表中获取数据。我用抽象的getter方法做了一个DTO接口,类似于这样。

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();
}

在此接口中,我的getFreelanceInvoiceId();一个方法使用mysql的json_arrayagg函数返回一个JSON数组,我将数据类型改为String、String[]和Arraylist,但它在我的响应中返回类似下面的内容

"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\"]"

有没有办法只返回不包含反斜杠的数组?

z2acfund

z2acfund1#

您可以使用JPA中的@Converter(也可以通过hib实现)

@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<>();

相关问题