JAXB-@XMLTransient字段返回到UI时消失

问题描述 投票:0回答:1

我的应用程序在后端使用多个POJO来将数据从后端编组到UI。数据以字符串形式从DB发送,使用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。但是,当我们在用户界面中调用它时,我们看到的响应为:

{"name":null}

其他字段甚至都没有显示。就像我提到的那样,这只是在由于JBoss升级而迁移到杰克逊的3.0+版本之后才发生。

我的应用程序在后端使用多个POJO来将数据从后端编组到UI。数据作为字符串来自数据库,它使用Jackson映射到我们的POJO中,然后返回...

java jackson jaxb jax-rs
1个回答
0
投票

Jackson能够识别JAXB批注以配置序列化/反序列化。

© www.soinside.com 2019 - 2024. All rights reserved.