java - 瞬态 json jax-rs
问题描述
我正在学习创建一个休息 api。这是我的MessageResource
课:
@Path("/message")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public class MessageResource {
private Map<Integer, Message> messages = Database.getMessages();
@GET
@Path("/all")
public List<Message> allMessages() {
return new ArrayList<Message>(messages.values());
}
//... some other stuff
}
Message
班级:
@XmlRootElement
public class Message {
private Integer id;
private String message;
private String author;
public Message() {}
public Message(Integer id, String message, String author) {
this.id = id;
this.message = message;
this.author = author;
}
public boolean isValidToAdd() {
if(Database.getMessages().containsKey(id) || id < 0) return false;
if(message.isEmpty()) return false;
if(author.isEmpty()) return false;
return true;
}
//getters and setters for "id", "message" and "author"
}
问题是当header 是时生成的响应MessageResource.allMessages()
包含一个字段,但当header 是or时不显示。我已经尝试添加和,但它仍然出现。有关如何从 json 响应中删除密钥的任何建议?validToAdd
Accept
application/json
Accept
application/xml
text/xml
@XmlTransient
@JsonbTransient
Message.isValidToAdd()
validToAdd
解决方案
最好将消息验证器分离到另一个类中。但是如果你想把它放在消息类中,你可以考虑为它归档,例如public boolean validToAdd;
现在,如果您想 jsonb 忽略它,您可以将其标记为,@JsonbTransient public boolean validToAdd;
但 xml 绑定不会忽略它,您也可以添加@XmlTransient
。或使 isValidToAdd 成为私有方法,因为它只能从类内部调用。
还有另一种方法是使用 jsonb 并为其创建自定义设置(JsonbConfig)。 最好将 messagevalidator 作为一个类分开
推荐阅读
- python - 在 Pandas 中将混合字符串转换为日期时间对象
- angular - Angular5-Toaster 动态组件注入参数
- python - 在 Cartopy 中创建陆地/海洋面具?
- reactjs - 雨果与 React?
- angular - Angular 7 错误 ReferenceError:未定义 SystemJS
- java - 不能用铬运行黄瓜/硒
- google-cloud-platform - 将 Oracle 11g 数据库迁移到 Google Cloud Spanner
- c# - 我是否正确创建了课程?
- c# - DataTemplate 只指定绑定而不是类型
- pandas - 如何在熊猫的聚合函数中创建查找列的频率