【问题标题】:JAXB elements needed only when method consumes xml/json仅当方法使用 xml/json 时才需要 JAXB 元素
【发布时间】:2014-02-22 19:54:10
【问题描述】:

问题:我试图避免将某些类属性包含在 GET 请求中作为 xml 元素,但要在 POST 请求中识别。

我的课的简化版(只有必要的东西):

@XmlRootElement(name = "user")
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
public class User implements Serializable{

    private String username;
    private String password;

    ...

    @XmlTransient //prevent password to be inserted in XML/JSON on GET requests.
    public String getPassword() {
        return password;
    }
}

我使用@XmlTransient 来防止密码(尽管事件被保存为哈希)在GET 请求中退出。
所以对于一个请求(比方说)localhost:8080/app/user/John 它只会被返回(为了简单起见)

<user>
    <username>John</username>
</user>

但是当我尝试发送一些 XML/JSON 时(比如说:):

<user>
    <username>John</username>
    <password>Doe</password>
</user>

由于@XmlTransient 注释,密码获取被忽略:

@POST
@Consumes(value = {"application/xml", "application/json"})
public void insertUser(User user){
    em.persist(user); //ERROR because User#password is NULL
}

我想知道我的问题是否有解决方法。

【问题讨论】:

    标签: java xml rest jakarta-ee jaxb


    【解决方案1】:

    这里有两种方法可以解决您的问题:

    • 查看Annox Project。它允许您使用其他 DTO/JAXB 映射。
    • 只需对 POST 和 GET 使用不同的 DTO

    【讨论】:

    • 没有纯 JAXB 解决方案吗? (但仍然避免使用 2 个 DTO,因为我发现仅为此目的再使用一个 DTO 有点难看...)
    • 据我所知,没有一个纯粹的 JAXB 解决方案(除了项目符号 2)
    猜你喜欢
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 2018-03-08
    • 2014-05-12
    相关资源
    最近更新 更多