[alibaba/fastjson]FastJsonHttpMessageConverter4无法将枚举序列化成ordinal

2025-11-24 283 views
5

使用springmvc中的FastJsonHttpMessageConverter4无法将枚举序列化成ordinal,求救

回答

7

@VictorZeng 帮忙看看

9

@liangzhongqiu 请提供一下test case

4

package com.alibaba.fastjson.support.spring;

import com.alibaba.fastjson.support.config.FastJsonConfig; import org.junit.Assert; import org.junit.Test; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpOutputMessage;

import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream;

import static com.alibaba.fastjson.serializer.SerializerFeature.*;

/**

  • @author Liangzhongqiu
  • @date 2017/7/19 019
  • @time 21:25 */ public class FastJsonHttpMessageConverter4Test {

    @Test public void write() throws IOException{ FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(QuoteFieldNames,SkipTransientField,SortField,IgnoreNonFieldGetter); FastJsonHttpMessageConverter4 fastJsonHttpMessageConverter4 = new FastJsonHttpMessageConverter4(); fastJsonHttpMessageConverter4.setFastJsonConfig(fastJsonConfig); User user = new User(Person.MAN,550101); HttpOutputMessage outputMessage = new HttpOutputMessage() {

        OutputStream outputStream = new ByteArrayOutputStream();
        HttpHeaders httpHeaders = new HttpHeaders();
    
        @Override
        public OutputStream getBody() throws IOException {
            return outputStream;
        }
    
        @Override
        public HttpHeaders getHeaders() {
            return httpHeaders;
        }
    };
    fastJsonHttpMessageConverter4.writeInternal(user, User.class, outputMessage);//模拟 Spring MVC 写出
    String jsonString = outputMessage.getBody().toString();//输出 {"areaCode":550101,"person":"MAN"} 而不是期望的 {"areaCode":550101,"person":0}
    String expectJsonString = "{\"areaCode\":550101,\"person\":0}";
    Assert.assertTrue(jsonString.equals(expectJsonString));

    }

}

enum Person{ MAN,WOMAN }

class User{

private Person person;

private Integer areaCode;

public User(){}

public User(Person person,Integer areaCode){
    this();
    this.person = person;
    this.areaCode = areaCode;
}

public Person getPerson() {
    return person;
}

public void setPerson(Person person) {
    this.person = person;
}

public Integer getAreaCode() {
    return areaCode;
}

public void setAreaCode(Integer areaCode) {
    this.areaCode = areaCode;
}

}

4

@liangzhongqiu 这样或许能帮到你 JSON.DEFAULT_GENERATE_FEATURE = SerializerFeature.config(JSON.DEFAULT_GENERATE_FEATURE, SerializerFeature.WriteEnumUsingName, false);

9

@VictorZeng 谢谢,这样可以