gpt4 book ai didi

java - 无注释的 Restful Web 服务

转载 作者:行者123 更新时间:2023-12-01 04:12:53 25 4
gpt4 key购买 nike

我正在寻找一种使用 jersey/resteasy 创建 Web 服务的方法,而无需在 POJO/模型类中添加注释。我用 jooq 生成模型类每次数据库发生更改时都会生成模型类。

我发现了两个与我的问题相关的主题:herehere但我想知道除了使用另一个库/实现之外是否还有其他解决方案。

有什么建议吗?技术?想法?

非常感谢!

编辑:我添加一些代码。我有一个名为“Mushroom”的模型类,它由 3 个字段组成:mushroom_id、标题、描述。

我想要一个如下所示的 JSON 表示形式:

{
mushroom: {
mushroom_id: 12,
title: "pied de mouton",
description: "très bon champignon!"
}
}

为此,使用 Resteasy,我需要一个带有以下注释的蘑菇类:

@XmlRootElement(name = "mushroom")
public class Mushroom {
private Integer mushroomId;
private String title;
private String description

// for each field I need a getter
// with the XmlElement annotations.
// for 'description' for instance:
@XmlElement
public String getDescription() {
return description;
}
}

但是,jooq 使用我的表 Mushroom 生成的 Mushroom 类/实体如下所示:

@javax.annotation.Generated(value    = { "http://www.jooq.org", "3.2.0" },
comments = "This class is generated by jOOQ")
@java.lang.SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Mushrooms extends org.jooq.impl.TableImpl<com.spanier.db.tables.records.MushroomsRecord> {

private static final long serialVersionUID = -539518621;

/**
* The singleton instance of <code>public.mushrooms</code>
*/
public static final com.spanier.db.tables.Mushrooms MUSHROOMS = new com.spanier.db.tables.Mushrooms();

/**
* The class holding records for this type
*/
@Override
public java.lang.Class<com.spanier.db.tables.records.MushroomsRecord> getRecordType() {
return com.spanier.db.tables.records.MushroomsRecord.class;
}

/**
* The column <code>public.mushrooms.mushrooms_id</code>.
*/
public final org.jooq.TableField<com.spanier.db.tables.records.MushroomsRecord, java.lang.Integer> MUSHROOMS_ID = createField("mushrooms_id", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaulted(true), this);

/**
* The column <code>public.mushrooms.name</code>.
*/
public final org.jooq.TableField<com.spanier.db.tables.records.MushroomsRecord, java.lang.String> NAME = createField("name", org.jooq.impl.SQLDataType.CHAR.length(50).nullable(false), this);

/**
* The column <code>public.mushrooms.description</code>.
*/
public final org.jooq.TableField<com.spanier.db.tables.records.MushroomsRecord, java.lang.String> DESCRIPTION = createField("description", org.jooq.impl.SQLDataType.VARCHAR, this);

/**
* Create a <code>public.mushrooms</code> table reference
*/
public Mushrooms() {
super("mushrooms", com.spanier.db.Public.PUBLIC);
}

/**
* Create an aliased <code>public.mushrooms</code> table reference
*/
public Mushrooms(java.lang.String alias) {
super(alias, com.spanier.db.Public.PUBLIC, com.spanier.db.tables.Mushrooms.MUSHROOMS);
}

/**
* {@inheritDoc}
*/
@Override
public org.jooq.Identity<com.spanier.db.tables.records.MushroomsRecord, java.lang.Integer> getIdentity() {
return com.spanier.db.Keys.IDENTITY_MUSHROOMS;
}

/**
* {@inheritDoc}
*/
@Override
public org.jooq.UniqueKey<com.spanier.db.tables.records.MushroomsRecord> getPrimaryKey() {
return com.spanier.db.Keys.MUSHROOMS_PKEY;
}

/**
* {@inheritDoc}
*/
@Override
public java.util.List<org.jooq.UniqueKey<com.spanier.db.tables.records.MushroomsRecord>> getKeys() {
return java.util.Arrays.<org.jooq.UniqueKey<com.spanier.db.tables.records.MushroomsRecord>>asList(com.spanier.db.Keys.MUSHROOMS_PKEY);
}

/**
* {@inheritDoc}
*/
@Override
public com.spanier.db.tables.Mushrooms as(java.lang.String alias) {
return new com.spanier.db.tables.Mushrooms(alias);
}
}

可以看到jooq生成的类是: 1.已经充满了注释,如果我添加新的注释,那么轻松“阅读”该类将变得很复杂 2.由于每次在 Mushroom 表中进行修改时都会生成 jooq 类,因此我将丢失注释(json 表示的注释),并且需要再次编辑 jooq 类。

所以我正在寻找一种方法来在另一个类/另一个文件中添加 Mushroom 生成的类的 Resteasy 注释(json 表示)。

最佳答案

第一句话:您应该始终将持久类与数据传输对象分开。这使得您的应用程序能够应用于任何数据库系统,而不会对您的 Web 服务契约(Contract)产生任何影响。

第二点:拥有真正的 DTO 使您能够在这些 DTO 类上添加自己的注释,或者只是不添加注释,因为您的对象可以通过指定 Web 服务的数据返回类型自动转换为 JSON 格式。

关于java - 无注释的 Restful Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19744015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com