簡體   English   中英

Glassfish 4 中使用 jersey 的 JSON 中未用引號括起來的數字字段

[英]numeric fields not enclosed in quotes in JSON using jersey in Glassfish 4

我有一個 Web 服務,它接受一個 int 並且一個字符串返回一個完整的 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 可以從我的應用程序返回,但我不是希望進行所有這些轉換...如果我可以全局更改 JSON,那將是理想的。

根據 ( 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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM