有没有办法允许字段作为输入但是在JAX-B中将其从输出中排除?我添加了@XMLTransient,但这会阻止该字段用作输入字段。我正在使用Jersey 2.25.1和Moxy。
该方案是用户记录上的密码字段。我想在创建新用户记录时允许它传入,但我不希望将其作为用户POJO的一部分包含在任何响应中。
编辑: 我尝试了@XmlReadOnly属性,似乎已经完成了这个伎俩。它是org.eclipse.persistence.oxm.annotations包的一部分。
答案 0 :(得分:0)
一种方法是使用XmlAdapter
。您可以在unmarshal()
上返回结果,并在null
marhsall()
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);
}
}