【问题标题】:JSON Verification rest serviceJSON验证休息服务
【发布时间】:2013-03-27 02:58:45
【问题描述】:

环境:Java、Jersey with Jackson、Tomcat。

我有一个从客户端获取 JSON 输入的休息服务。我想验证输入,如果它是 JSON,然后是 JSON,那么 JSON 输入中的键是否符合预期。如果是,那么它应该产生 HTTP 400-Bad 请求。

例如-

// 休息服务 @邮政 @Path("登录") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) 公共响应登录(凭据登录, @Context HttpServletRequest httpRequest) { 如果(登录 == 空) // 返回 sendBadRequest(HTTP 400); String userName = (String) login.getUsername(); String passWord = (String) login.getPassword(); 如果(用户名 == 空) // 返回 sendBadRequest(HTTP 400); else if (passWord == null) // 返回 sendBadRequest(HTTP 400); ...... } // 凭据.java @JsonIgnoreProperties(ignoreUnknown=true) 公共类凭证{ 私人字符串用户名; 私人字符串密码; // getter 和 setter... }

例如 - 非 json 输入,如

 {"key" : "val" 
应该产生 HTTP 400。以及像
 {"usernames" : "abc", "passwords" : "abc"} 应该产生 HTTP 400。

我的代码适用于提到的案例 2,但我希望它也适用于案例 1。当存在非 json 输入时,我希望它将 Credential 对象设置为 null,然后我可以将“if”中的 null 对象返回 HTTP 400。但事实并非如此。休息框架为这种情况提供了什么?

【问题讨论】:

    标签: java rest jakarta-ee jersey jackson


    【解决方案1】:

    经过长时间的研究,我设法找到了答案。我们必须在 rest 框架中使用 @Provider 来处理这个错误。

    这是一个例子:

    @Provider 公共类 JsonParseExceptionHandler 实现 异常映射器 { 公共响应到响应(JsonParseException 异常){ ResponseStatus 状态 = 新的 ResponseStatus(); 客户端响应客户端响应 = 新客户端响应(); status.setCode(Status.BAD_REQUEST.getStatusCode()); status.setMessage(Status.BAD_REQUEST.name()); status.setFieldName("JSON 解析异常"); status.setFieldDescription(exception.getMessage()); clientResponse.setStatus(status); 返回响应 .status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()) .entity(clientResponse).build(); } }

    【讨论】:

      【解决方案2】:

      您可以使用 gson 将您的 JSON 转换为 java 对象,然后您可以验证

      https://code.google.com/p/google-gson/

      或者你可以使用 Json Lib

      http://json-lib.sourceforge.net/index.html

      以下方法会有所帮助

      http://json-lib.sourceforge.net/apidocs/jdk15/net/sf/json/util/JSONUtils.html#mayBeJSON(java.lang.String)

      【讨论】:

      • 我知道 GSON 位我没有在这里使用它。我想使用 Java Jersey 框架来处理异常,而不是我比较字符串的代码。谢谢你的建议,但这不是我想要的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2012-07-27
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 2012-03-31
      相关资源
      最近更新 更多