Spring @RequestBody和Enum值

我有这个

public enum Reos {

VALUE1("A"),VALUE2("B");

private String text;

Reos(String text){this.text = text;}

public String getText(){return this.text;}

public static Reos fromText(String text){

for(Reos r : Reos.values()){

if(r.getText().equals(text)){

return r;

}

}

throw new IllegalArgumentException();

}

}

还有一个名为Review的类,该类包含 类型的属性。

public class Review implements Serializable{

private Integer id;

private Reos reos;

public Integer getId() {return id;}

public void setId(Integer id) {this.id = id;}

public Reos getReos() {return reos;}

public void setReos(Reos reos) {

this.reos = reos;

}

}

最后,我有一个控制器,它使用 接收对象复审。

@RestController

public class ReviewController {

@RequestMapping(method = RequestMethod.POST, value = "/reviews")

@ResponseStatus(HttpStatus.CREATED)

public void saveReview(@RequestBody Review review) {

reviewRepository.save(review);

}

}

如果我用

{"reos":"VALUE1"}

没有问题,但是当我用

{"reos":"A"}

我得到这个错误

Could not read document: Can not construct instance of com.microservices.Reos from String value 'A': value not one of declared Enum instance names: [VALUE1, VALUE2] at [Source: java.io.PushbackInputStream@23ce847a; line: 1, column: 40] (through reference chain: com.microservices.Review["reos"]); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of com.microservices.Reos from String value 'A': value not one of declared Enum instance names: [VALUE1, VALUE2] at [Source: java.io.PushbackInputStream@23ce847a; line: 1, column: 40] (through reference chain: com.microservices.Review["reos"])"

我理解了这个问题,但是我想知道一种告诉Spring的方法,对于每个带有Reos枚举的对象,请使用Reos.fromText()而不是Reos.valueof()。

这可能吗?

回答:

我找到了我所需要的。

http://chrisjordan.ca/post/50865405944/custom-json-serialization-for-enums-

using-jackson

这是两个步骤。

  1. 覆盖Reos枚举的toString方法

@Override public String toString(){返回文本;}

  1. 用@JsonCreator注释Reos枚举的fromText方法。

@JsonCreator公共静态Reos fromText(字符串文本)

就这样。

我希望这可以帮助其他面临相同问题的人。

以上是 Spring @RequestBody和Enum值 的全部内容, 来源链接: utcz.com/qa/434826.html

回到顶部