- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序在后端使用多个 POJO 将数据从后端编码到 UI。数据以字符串形式来自数据库,使用 Jackson 将其映射到我们的 POJO,然后我们使用 @Produces(MediaType.APPLICATION_JSON)
在 API 调用中返回对象。将应用程序迁移到 JBoss 7 EAP 时,我们注意到任何标记有 @XmlTransient
的字段在返回到 UI 时都没有被编码为 JSON。 POJO 对象已填充所有字段,但在 UI 端,它们根本不会显示在 JSON 字符串中。示例:
//class POJO
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class FetchDataVO {
@XmlTransient
private String Id;
private String name;
@XmlTransient
private String domain;
}
我们的 API 响应如下所示:
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "getUserById", nickname = "getUserById")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Success", response = FetchDataVO.class),
@ApiResponse(code = 401, message = "Unauthorized"),
@ApiResponse(code = 403, message = "Forbidden"),
@ApiResponse(code = 404, message = "Not Found"),
@ApiResponse(code = 500, message = "Failure")})
public @ResponseBody
@Valid fetchDataVO getUserById(
@PathParam("id") String id){
FetchDataVO fetchVO = callDataBase.getUserById(id);
//All the data will be present here, everything is correct so far
log.info("fetchVO contents - " + fetchVO.printDetails());
return fetchVO;
}
我们的后端代码将打印出所有字段都正确的 POJO。但是,当我们在 UI 中调用它时,我们看到的响应为:
{"name":null}
其他字段甚至不显示。就像我提到的,这只发生在由于 JBoss 升级而迁移到 jackson 3.0+ 版本之后。
最佳答案
Jackson 能够识别 JAXB 注释来配置序列化/反序列化。
不幸的是,在某些时候,Wildfly/JBoss JAX-RS 实现 RestEasy 默认启用了此功能。因此,如果您的 bean 使用 @XmlRootElement
进行注释,Jackson 将遵循 @XmlTransient
注释,从而忽略该字段。
作为禁用它的解决方法,您可以使用 JAX-RS ContextResolver
来配置没有此功能的 Jackson ObjectMapper
。
要获得普通的ObjectMapper
,只需在 REST 模块上添加类似的内容即可:
@Provider
public class JacksonObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
private final ObjectMapper mapper;
public JacksonObjectMapperContextResolver() {
mapper = new ObjectMapper();
// additional configuration here if needed
}
@Override
public ObjectMapper getContext(Class<?> type) {
return mapper;
}
}
关于java - JAXB - @XMLTransient 字段在返回到 UI 时消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61332900/
我有两门课: public class A implements Serializable { ... @OneToMany(cascade = CascadeType.ALL, ma
编码时是否可以在不使用@XmlTransient的情况下忽略某些元素 JAXBContext jc = JAXBContext.newInstance(Customer.class);
@XmlTransient 阻止将 JavaBeans 属性映射到 XML 表示。是否存在与此相反的情况,这意味着即使 WebService 未使用的方法也会被映射?如果这不可能,是否存在解决方法?
有没有一种方法可以配置 @XmlTransient JPA2.0 注释,它只会在 Java 对象序列化为 xml 时阻止 JAXB 机制,而不是在传入的 XML 转换为 java 对象时阻止 JAXB
我的实体有一个属性, @Embedded @XmlTransient private ReleaseTraits traits; @XmlTransient public ReleaseTraits
我在我的项目中使用 Spring 和 Apache CXF,该项目以首次代码风格实现 Java Web 服务。 我有一个定义的变量: @XmlTransient public String word;
我正在尝试使用 JAXB 解码以下 XML: Basement Jaxx Back 2 the Wild B
@JsonIgnore @Xmltransient private int id 我想了解在某些属性/字段 @JsonIgnore 之上使用这两个注释的目的& @Xmltransient举个例子。 我
自从有一天我陷入了这个问题。但首先我想描述一下,为什么我要按照所示的方式进行: 我们正在使用 EE7 和 Glassfish4 在 Java 中构建 RESTful API。身份验证和授权必须自己构建
我有一个声明 Joda Time DateTime 字段的类。 但是,这个值不是由解码过程设置的,而是稍后在 afterUnmarhsal 方法中设置的。 因此,该字段被标记为XmlTransient
使用 JXC 模式生成 ant 任务,我似乎无法让它忽略枚举。我有几个内部使用的枚举来表示与生成的 XML 无关的类型或次要配置值。 我可以使用枚举作为 @XmlTransient 来排除该字段,以将
我正在尝试将 XML 解码为一个我期望应该具有特定字段的对象。但是,我不想将该对象编码到包含它的 XML 中。我喜欢的类似于: @XmlRootElement(name = "User") publi
我的应用程序在后端使用多个 POJO 将数据从后端编码到 UI。数据以字符串形式来自数据库,使用 Jackson 将其映射到我们的 POJO,然后我们使用 @Produces(MediaType.AP
我有代表用户的类。用户被分为两组,具有不同的id。我可以制作类似“if statements”的内容,以便 if (id==1) 在字段 @XMLTransient 上设置注释 或者唯一的一种方法是创
我有一个 XSD,想要将一些属性标记为 XmlTransient,以便 XJC 在 Java 中生成这些属性,并通过 JAXB 编码和解编码忽略这些属性。 我可以修改 XSD,但不知道应该在 xs:a
我正在使用 Jackson (jaxb) 进行 JSON 编码和解码。 例如,我在这里注释了地址字段 XmlTransient,因为我不希望在列出人员记录时映射它(安全和速度问题),地址字段无论如何都
我像这样注释了一个 XmlAdapter 类: @XmlTransient public class DateTimeXmlAdapter extends XmlAdapter { 但 schemag
我正在使用 JAXB 将一些 xml 解码到对象中。 我有一个继承自抽象类的类。我已将抽象类标记为@XmlTransient。然后使用 XMLType PropOrder 我可以访问抽象类中的属性,如
我正在使用 JAX-RS 和 JAXB 开发 RESTful 服务。我有一个Complain类,以下是它的精简版本: @Entity @Table(name = "complain") @XmlRoo
我有一个实体类: public class Customer implements Serializable { private static final long serialVersionUID
我是一名优秀的程序员,十分优秀!