gpt4 book ai didi

java - JAX-B 仅从输出中排除字段,但允许输入

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:25 25 4
gpt4 key购买 nike

有没有办法允许字段作为输入,但在 JAX-B 中将其从输出中排除?我添加了 @XMLTransient,但这会阻止该字段用作输入字段。我正在使用 Jersey 2.25.1 和 Moxy。

该场景是用户记录上的密码字段。我想允许它在创建新用户记录时传入,但我不想将其作为用户 POJO 的一部分包含在任何响应中。

编辑:我尝试了 @XmlReadOnly 属性,它似乎已经成功了。它是 org.eclipse.persistence.oxm.annotations 包的一部分。

最佳答案

一种方法是使用 XmlAdapter。您可以在 unmarshal() 上返回结果,并在 marhsall()

上返回 null
public class OnlyInputAdapter extends XmlAdapter<String, String> {

@Override
public String unmarshal(String s) throws Exception {
return s;
}

@Override
public String marshal(String v) throws Exception {
return null;
}
}

然后只需在模型上注释密码属性即可

@XmlJavaTypeAdapter(OnlyInputAdapter.class)
public String getPassword() {
return this.password;
}

这是一个测试

public class PasswordSerializationTest extends JerseyTest {

private User serverUser;

@Path("test")
@Produces("application/json")
@Consumes("application/json")
public class TestResource {

@POST
public User postUser(User user) {
serverUser = user;
return user;
}
}

@Override
public ResourceConfig configure() {
return new ResourceConfig().register(new TestResource());
}

@Test
public void doIt() {
User clientUser = target("test")
.request()
// post string; can't post User as the
// password field wouldn't serialize
.post(Entity.json("{\"password\":\"secret\"}"), User.class);

assertThat(serverUser.getPassword()).isEqualTo("secret");
assertThat(clientUser.getPassword()).isEqualTo(null);
}
}

关于java - JAX-B 仅从输出中排除字段,但允许输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47798000/

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