我正在使用的 API 已决定接受 UUID 作为 Base32 编码的字符串,而不是 UUID.fromString()
期望.这意味着我不能简单地将 @QueryParam UUID myUuid
写为方法参数,因为转换会失败.
我正在通过编写一个自定义对象来解决这个问题,该对象使用不同的 fromString
转换器与 Jersey @QueryString
和 @FormParam
注释.我希望能够在 fromString
方法中访问转换的上下文,以便提供更好的错误消息.现在,我能做的只有以下几点:
public static Base32UUID fromString(String uuidString) {最终的 UUID uuid = UUIDUtils.fromBase32(uuidString, false);if (null == uuid) {throw new InvalidParametersException(ImmutableList.of("无效的 uuid:" + uuidString));}返回新的 Base32UUID(uuid);}
我希望能够公开 which 参数的 UUID 无效,因此我记录的异常和返回的用户错误一目了然.理想情况下,我的转换方法会有一个额外的细节参数,如下所示:
public static Base32UUID fromString(字符串 uuidString,String parameterName//新参数?) {最终的 UUID uuid = UUIDUtils.fromBase32(uuidString, false);if (null == uuid) {throw new InvalidParametersException(ImmutableList.of("无效的 uuid:" + uuidString+ " 为参数 " + parameterName));}返回新的 Base32UUID(uuid);}
但这会打破 按惯例意味着 Jersey 找到解析方法: