猿问

SpringMVC中使用jackson返回json时如何将枚举转为json

SpringMVC中使用jackson返回json时如何将枚举转为json

在网上搜过,给出的方案是在要转换的枚举的get方法上加上@JsonValue注解,我加上后报了错
下面是我错误的示例:
StatusEnum:

IndexController:

https://img4.mukewang.com/5cc016810001153205100419.jpg

POM.xml中jackson与Spring的版本号:

https://img2.mukewang.com/5cc0168300011d7208000412.jpg

报的错:

https://img.mukewang.com/5cc016860001ab0d08000244.jpg

犯罪嫌疑人X
浏览 2193回答 5
5回答

慕姐4208626

我的做法是写个公用的方法转Map怎么实现方便就怎么去实现,其实我觉得注解应该放在枚举实例的get方法上public class Result {    private StatusEnum status;    ...        @JsonValue    public StatusEnum getStatus() {        return status;    }        public void setStatus(status) {        this.status = status;    }}我没用过这个所以也不太清楚,不过你可以试试耐不住好奇心我去试了一下。。。上面那个不可行。。。不过不用@JsonValue@JsonFormat(shape = JsonFormat.Shape.OBJECT)public enum StatusEnum {    STATUS_ERROR("200", "OK"),    STATUS_SUCCESS(404, "Not Found");        private Stringcode;    private String msg;        private Status(String code, String msg) {...}    //getter & setter    ...}亲测 可行

慕尼黑的夜晚无繁华

enum默认jackson只能序列化为索引和枚举名称,如果你需要返回{} json object 需要自已实现Serializer

万千封印

@JsonFormat(shape = JsonFormat.Shape.OBJECT)public enum StatusEnum {    STATUS_ERROR("200", "OK"),    STATUS_SUCCESS(404, "Not Found");        private String code;    private String msg;        private Status(String code, String msg) {...}    //getter & setter    @JsonValue    public String getMsg(){        return msg;    }    ...}可以返回成msg的值。

森栏

查看官方解释@jsonvalue'At most one method of a Class can be annotated with this annotation; if more than one is found, an exception may be thrown.'发现多个@jsonvalue会发生异常
随时随地看视频慕课网APP

相关分类

Java
我要回答