Spring API @RequestParam 输入转换
Spring API @RequestParam Input conversion
我正在为 API 创建一个方法。在这种方法中,我有一些可选参数。这些是用于搜索事件的过滤器。当我尝试 运行 它并输入以下内容时 url:
http://localhost:8181/api/events?id=gRDHzDh9TdiLDAZgrZc2wg==
我收到此错误消息:
Failed to convert value of type 'java.lang.String' to required type 'java.util.UUID'; nested exception is java.lang.IllegalArgumentException: Invalid UUID string: 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);
}
}
所以这是我的 2 个问题:
如何将字符串转换为 RequestParam 中的有效 UUID 输入?
如何将字符串转换为 RequestParam 中的有效枚举? (因为枚举我有同样的错误)
编辑
我的代码现在是这样的:
@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);
}
}
但我仍然收到错误消息:
Invalid UUID string: gRDHzDh9TdiLDAZgrZc2wg==
我正在为 API 创建一个方法。在这种方法中,我有一些可选参数。这些是用于搜索事件的过滤器。当我尝试 运行 它并输入以下内容时 url:
http://localhost:8181/api/events?id=gRDHzDh9TdiLDAZgrZc2wg==
我收到此错误消息:
Failed to convert value of type 'java.lang.String' to required type 'java.util.UUID'; nested exception is java.lang.IllegalArgumentException: Invalid UUID string: 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);
}
}
所以这是我的 2 个问题:
如何将字符串转换为 RequestParam 中的有效 UUID 输入?
如何将字符串转换为 RequestParam 中的有效枚举? (因为枚举我有同样的错误)
编辑
我的代码现在是这样的:
@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);
}
}
但我仍然收到错误消息:
Invalid UUID string: gRDHzDh9TdiLDAZgrZc2wg==