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 个问题:

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

  2. 如何将字符串转换为 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==

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

You need to use UUID.fromString() API, see here

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

You need to use Enum.valueOf() API, see here