我有一个接受int的web服务,一个字符串返回一个完整的bean。我需要调整返回的JSON的格式。我在运行glassfish 4和jersey
下面是the服务:
@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可以从我的应用程序返回,我不想做所有的转换……如果我可以全局更改JSON,那将是最理想的。
发布于 2014-07-30 21:35:47
根据(http://json.org/),格式正确的数字不会被引用。
不确定您使用的序列化程序是什么,但如果它是Jackson:
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;
}
}
https://stackoverflow.com/questions/25045267
复制相似问题