在Glassfish 4中使用泽西的JSON中没有用引号括起来的数字字段

时间:2014-07-30 19:25:28

标签: java json web-services glassfish

我有一个接受int的Web服务,而一个字符串返回一个完整的bean。我需要调整返回的JSON的格式。我正在运行带有球衣的glassfish 4

以下是网络服务:

@GET
@Produces( "application/json" )
@Path( "license/{requestID}/{textToVerify}" )
public CustomerBean getMetaData( @PathParam( "requestID" ) int requestID, @PathParam( "textToVerify" ) String textToVerify )
{
   // code removed. 
}

这是返回的bean。

@XmlRootElement( name = "customer" )
@XmlType( propOrder =
{
    "id", "name", "duration", "status", "dateCreated", "dateActivated", "editionID"
 } )
public class CustomerBean
{
    private Integer id;
    private String serial;
    private Integer duration;
    private Integer status;
    private Date dateCreated;
    private Date dateActivated;
    private int editionID;

   // getter/setters and constructor ommitted...
}

这是返回的JSON:

{"id":100,"name":"Joe User","duration":0,"status":2,"dateCreated":"2013-01-03T02:36:35","dateActivated":"2013-01-03T02:39:03","edition":3}

所以没有数字字段用引号括起来...有没有办法改变它以便所有字段值都被包含在内?我知道这是早期JAXB实现的一个错误,但我现在卡住了,因为客户端期望所有字段都用引号括起来

我理解在这个简单的例子中我可以将所有字段串起来并按照我想要的方式格式化日期,但这是简化的示例 - 我有近30种不同的bean可以从我的应用程序返回并且我和#39;我不打算做所有转换...如果我可以全局改变JSON,那将是理想的。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

根据(http://json.org/),未引用格式正确的数字。

不确定您使用的是什么序列化程序,但如果是杰克逊:

objectMapper.configure(Feature.WRITE_NUMBERS_AS_STRINGS, true);

如果您正在使用Moxy(默认设置),我不知道是否或如何更改它。如果您想禁用Moxy以便使用Jackson,请在Jersey上注册此课程。

public class Jackson2Feature implements Feature {

    @Override
    public boolean configure(FeatureContext context) {
        final String disableMoxy = PropertiesHelper.getPropertyNameForRuntime(
                CommonProperties.MOXY_JSON_FEATURE_DISABLE,
                context.getConfiguration().getRuntimeType());
        context.property(disableMoxy, true);

        // Allow jaxb annotations
        context.register(JacksonJaxbJsonProvider.class, MessageBodyReader.class, MessageBodyWriter.class);
        return true;
    }
}