Enums 使用@XmlEnumValue映射JAX-RS枚举

Enums 使用@XmlEnumValue映射JAX-RS枚举,enums,jax-rs,jboss-eap-6,Enums,Jax Rs,Jboss Eap 6,我正在尝试映射此JSON: {“ref”:“code”,“type”:“desc”} 对于那些JAX-RS类: 公共类排序{ 公共字符串引用; 公共排序类型; } @XmlType @XmlEnum 公共枚举排序类型{ @XmlEnumValue(“asc”) 提升 @XmlEnumValue(“desc”) 下降; } 有了这个错误(我使用的是JBoss EAP 6.2): 通过查看,我也尝试了该定义,但没有成功: @XmlType @XmlEnum 公共枚举排序类型{ @XmlEnumV

我正在尝试映射此JSON:

{“ref”:“code”,“type”:“desc”}
对于那些JAX-RS类:

公共类排序{
公共字符串引用;
公共排序类型;
}
@XmlType
@XmlEnum
公共枚举排序类型{
@XmlEnumValue(“asc”)
提升
@XmlEnumValue(“desc”)
下降;
}
有了这个错误(我使用的是JBoss EAP 6.2):

通过查看,我也尝试了该定义,但没有成功:

@XmlType
@XmlEnum
公共枚举排序类型{
@XmlEnumValue(“asc”)
升序,
@XmlEnumValue(“desc”)
下行(“desc”);
私有字符串码;
排序类型(字符串代码){
this.code=代码;
}
}

我用了那难看的代码等待更好的答案:

@XmlEnum
公共枚举排序类型{
@XmlEnumValue(“asc”)
提升
@XmlEnumValue(“desc”)
下降;
私有静态映射sortingTypeByValue=new HashMap();
私有静态映射valueBySortingType=newHashMap();
静止的{
SortingType[]enumConstants=SortingType.class.getEnumConstants();
for(排序类型排序类型:枚举常量){
试一试{
String value=SortingType.class.getField(SortingType.name()).getAnnotation(XmlEnumValue.class).value();
sortingTypeByValue.put(值,sortingType);
valueBySortingType.put(排序类型,值);
}捕获(无此字段例外){
抛出新的非法状态异常(e);
}
}
}
@JsonCreator
公共静态排序类型创建(字符串值){
返回sortingTypeByValue.get(值);
}
@JsonValue
公共字符串getValue(){
返回值BySortingType.get(此);
}
}

老问题,但我会尝试一下。。。我没有使用XML注释类型,但是我在将枚举转换为JSON时遇到了同样的问题

在我的webapp中,我已经有了一个定制的objectMapper来处理我对JodaTime对象的使用,所以我在PostConstruct方法中添加了序列化/反序列化功能

import javax.annotation.PostConstruct;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.joda.JodaModule;

@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper>{

    final ObjectMapper mapper = new ObjectMapper();

    public ObjectMapperContextResolver() {
        mapper.registerModule(new JodaModule());
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return mapper;
    }

    @PostConstruct
    public void customConfiguration(){
        mapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
        mapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);
    }
}
import javax.annotation.PostConstruct;
导入javax.ws.rs.ext.ContextResolver;
导入javax.ws.rs.ext.Provider;
导入com.fasterxml.jackson.databind.DeserializationFeature;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入com.fasterxml.jackson.databind.SerializationFeature;
导入com.fasterxml.jackson.datatype.joda.JodaModule;
@提供者
公共类ObjectMapperContextResolver实现ContextResolver{
最终ObjectMapper映射器=新ObjectMapper();
公共对象MapPercontextResolver(){
registerModule(新的JodaModule());
}
@凌驾
公共对象映射器getContext(类类型){
返回映射器;
}
@施工后
公共配置(){
configure(反序列化功能。使用\u到\u字符串读取\u枚举,\u,true);
configure(SerializationFeature.WRITE_ENUMS_使用_TO_字符串,true);
}
}

来源:

我也有同样的问题。有人吗?有了这个,我的原始
enum
将从JSON
{“ref”:“code”,“type”:“desc”}
?@AnthonyO正确映射。应该是这样的,上面的代码示例允许我传递json并将其正确映射到枚举。
import javax.annotation.PostConstruct;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.joda.JodaModule;

@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper>{

    final ObjectMapper mapper = new ObjectMapper();

    public ObjectMapperContextResolver() {
        mapper.registerModule(new JodaModule());
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return mapper;
    }

    @PostConstruct
    public void customConfiguration(){
        mapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
        mapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);
    }
}