弹簧 API @RequestParam 输入转换



我正在为API创建一个方法。在这种方法中,我有一些可选的参数。这些是用于搜索事件的筛选器。当我尝试运行它并键入以下 URL 时:

http://localhost:8181/api/events?id=gRDHzDh9TdiLDAZgrZc2wg==

我收到此错误消息:

无法将类型"java.lang.String"的值转换为所需的类型"java.util.UUID";嵌套异常是java.lang.IllegalArgumentException:无效的UUID字符串:gRDHzDh9TdiLDAZgrZc2wg==

所以我知道我在我的 url 中插入了一个字符串,并期望在代码中有一个 UUID,但是我该如何转换呢?下面是我的代码:

@RequestMapping(
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity getEvents(@RequestParam(value = "id", required = false) UUID eventId,
@RequestParam(value = "title", required = false) String title,
@RequestParam(value = "playtype", required = false) PlayType playType,
@RequestParam(value = "skilllevel", required = false) SkillLevel skillLevel,
@RequestParam(value = "sporttype", required = false) SportType sportType,
@RequestParam(value = "long", required = false) String _long,
@RequestParam(value = "lat", required = false) String lat) {
try {
List<Event> events = eventService.getEvents(eventId, title, playType, skillLevel, sportType, _long, lat);
if (events.size() == 0) {
return new ResponseEntity("No events found", HttpStatus.OK);
}
return new ResponseEntity(events, HttpStatus.OK);
} catch (Exception ex){
return new ResponseEntity(ex.getMessage(), HttpStatus.BAD_REQUEST);
}
}

所以这是我的两个问题:

  1. 如何将字符串转换为请求参数中的有效 UUID 输入?

  2. 如何将字符串转换为请求参数中的有效枚举?(因为使用枚举我有相同的错误)

编辑

我的代码现在是这样的:

@RequestMapping(
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity getEvents(@RequestParam(value = "id", required = false) String eventId,
@RequestParam(value = "title", required = false) String title,
@RequestParam(value = "playtype", required = false) String playType,
@RequestParam(value = "skilllevel", required = false) String skillLevel,
@RequestParam(value = "sporttype", required = false) String sportType,
@RequestParam(value = "long", required = false) String _long,
@RequestParam(value = "lat", required = false) String lat) {
UUID id = null;
PlayType playType1 = null;
SkillLevel skillLevel1 = null;
SportType sportType1 = null;
try {
if (eventId != null){
id = UUID.fromString(eventId);
}
if (playType != null){
playType1 = PlayType.valueOf(playType);
}
if (skillLevel != null){
skillLevel1 = SkillLevel.valueOf(skillLevel);
}
if (sportType != null){
sportType1 = SportType.valueOf(sportType);
}
List<Event> events = eventService.getEvents(id, title, playType1, skillLevel1, sportType1, _long, lat);
if (events.size() == 0) {
return new ResponseEntity("No events found", HttpStatus.OK);
}
return new ResponseEntity(events, HttpStatus.OK);
} catch (Exception ex){
return new ResponseEntity(ex.getMessage(), HttpStatus.BAD_REQUEST);
}
}

但我仍然收到一个错误:

无效的 UUID 字符串: gRDHzDh9TdiLDAZgrZc2wg==

  1. 如何将字符串转换为有效的 UUID 输入?

您需要使用UUID.fromString()API,请参阅此处

  1. 如何将字符串转换为有效的枚举?

您需要使用Enum.valueOf()API,请参阅此处

最新更新