为什么我得到错误时,试图保存一个实体,其中包括enum?



我有以下来自Spring Boot应用程序的enum,我可能有解析问题。

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonValue;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Month {
JAN(0),
FEB(1),
MAR(2),
APR(3),
MAY(4),
JUN(5),
JUL(6),
AUG(7),
SEP(8),
OCT(9),
NOV(10),
DEC(11);

@JsonValue
private final int value;
Month(final int value) {
this.value = value;
}
public int toInt() {
return value;
}
public static Month fromInt(final int value) {
switch (value) {
case 0:
return JAN;
case 1:
return FEB;
case 2:
return MAR;
case 3:
return APR;
case 4:
return MAY;
case 5:
return JUN;
case 6:
return JUL;
case 7:
return AUG;
case 8:
return SEP;
case 9:
return OCT;
case 10:
return NOV;
case 11:
return DEC;
default:
return null;
}
}
public String toString() {
switch (this) {
case JAN:     
return "JAN"; 
case FEB:
return "FEB";
case MAR:
return "MAR";
case APR:
return "APR";
case MAY:
return "MAY";
case JUN:
return "JUN";
case JUL:
return "JUL";
case AUG:
return "AUG";
case SEP:
return "SEP";
case OCT:
return "OCT";
case NOV:
return "NOV";
case DEC:
return "DEC";
default:
return null;
}
}
}

这里是保存枚举的实体:

public class Trip implements java.io.Serializable {    
@JsonProperty("k1Month")
private Month k1Month;
...
}

这是我在控制器中进行保存的时候:

@PutMapping("/Trip/Update")     
public void updateTrip(@RequestBody Trip trip) {                            
tripService.updateTrip(trip);     
}

我从Spring Boot webclient调用控制器:

public static Trip saveTrip(Trip trip) {
String url = TripcalculationsServiceApplication.Trip_APP_BASE_URL;
WebClient client = WebClient.create(url);
return client.put()
.uri("Trips/Trip/Update")
.body(Mono.just(trip), Trip.class)
.retrieve()
.bodyToMono(Trip.class)
.block(); 
}

我收到一个警告,但我认为它导致webclient调用失败,这是警告:

解决[org.springframework.http.converter.HttpMessageNotReadableException:JSON解析错误:不能反序列化类型的值com.mycompany.tripservice.entity.Monthfrom String "JAN": not one ofEnum类可接受的值:[11,1,2,3,4,5,6,7,8,9,10 0);嵌套异常是com.fasterxml.jackson.databind.exc.InvalidFormatException:

调用服务抛出一个错误400坏请求(我认为它与解析有关,但只有当我选择月值时才导致服务失败)。

org.springframework.web.reactive.function.client.WebClientResponseException BadRequest美元:400错误的PUT请求

尝试以下操作(去掉@JsonFormat,添加@JsonCreator,移动@JsonValue)

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonValue;
public enum Month {
JAN(0),
FEB(1),
MAR(2),
APR(3),
MAY(4),
JUN(5),
JUL(6),
AUG(7),
SEP(8),
OCT(9),
NOV(10),
DEC(11);

private final int value;
Month(final int value) {
this.value = value;
}
@JsonValue
public int toInt() {
return value;
}
@JsonCreator
public static Month fromInt(final int value) {
switch (value) {
case 0:
return JAN;
case 1:
return FEB;
case 2:
return MAR;
case 3:
return APR;
case 4:
return MAY;
case 5:
return JUN;
case 6:
return JUL;
case 7:
return AUG;
case 8:
return SEP;
case 9:
return OCT;
case 10:
return NOV;
case 11:
return DEC;
default:
return null;
}
}
public String toString() {
switch (this) {
case JAN:     
return "JAN"; 
case FEB:
return "FEB";
case MAR:
return "MAR";
case APR:
return "APR";
case MAY:
return "MAY";
case JUN:
return "JUN";
case JUL:
return "JUL";
case AUG:
return "AUG";
case SEP:
return "SEP";
case OCT:
return "OCT";
case NOV:
return "NOV";
case DEC:
return "DEC";
default:
return null;
}
}
}

最新更新