当前位置: 首页 > 知识库问答 >
问题:

JSON验证rest服务

越俊艾
2023-03-14

环境:Java,泽西,jackson,汤卡特。

我有一个rest服务从客户端获取JSON输入。我想验证输入,如果它是JSON,然后它是JSON,然后JSON输入中的键是预期的或不是。如果是,那么它将产生HTTP400-bad请求。

比如--

// REST SERVICE
    @POST
    @Path("login")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response login(Credentials login,
            @Context HttpServletRequest httpRequest) {


        if (login == null)
            // return sendBadRequest(HTTP 400);

        String userName = (String) login.getUsername();
        String passWord = (String) login.getPassword();

        if (userName == null)
            // return sendBadRequest(HTTP 400);
        else if (passWord == null)
            // return sendBadRequest(HTTP 400);


    .....
}

// Credentials.java
@JsonIgnoreProperties(ignoreUnknown=true) 
public class Credentials {

    private String username;

    private String password;

// Getters and setters...
}

例如-非json输入如

 {"key" : "val" 
 {"usernames" : "abc", "passwords" : "abc"}

null

我的代码适用于前面提到的情况2,但我希望它也适用于情况1。当非JSON输入存在时,我希望它将凭据对象设置为null,然后我可以在'if'中使用null对象返回HTTP 400。但事实并非如此。rest框架为这种情况提供了什么吗?

共有1个答案

宿楚青
2023-03-14

经过长时间的研究,我终于找到了答案。我们不得不使用rest框架中的@Provider来处理这个错误。

下面是一个例子:


@Provider
public class JsonParseExceptionHandler implements
        ExceptionMapper {

    public Response toResponse(JsonParseException exception) {
        ResponseStatus status = new ResponseStatus();
        ClientResponse clientResponse = new ClientResponse();

        status.setCode(Status.BAD_REQUEST.getStatusCode());
        status.setMessage(Status.BAD_REQUEST.name());
        status.setFieldName("JSON Parsing Exception");
        status.setFieldDescription(exception.getMessage());

        clientResponse.setStatus(status);

        return Response
                .status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode())
                .entity(clientResponse).build();
    }

}

 类似资料:
  • 我有一个简单的springboot应用程序和一个Rest api。我想验证请求参数不为null/空。我将json转换成一个java对象,并从这里开始验证它们是否包含所有必需的字段,并且不为null或不为空。(对象没有保存到db)我目前正在使用javax验证方法,但是没有成功。 我还有一个包含的要素类,我需要验证(所有字段均为必填字段,而不是空或空)

  • 问题内容: REST服务需要根据JSON模式验证所有传入的JSON数据。json模式是公共可访问的,可以通过http请求进行检索。 我正在使用jackson-framwork在Java和json之间进行编组和拆组。到目前为止,我找不到使用杰克逊根据模式验证数据的任何可能性。 我还尝试了JsonTools框架,该框架显然带有这种验证功能。但是很不幸,我无法通过验证工作。 我该如何进行验证? 问题答案

  • 我正在尝试验证Json Objects。我使用https://code.google.com/p/rest-assured/wiki/Downloads?tm=2, greeter-schema.json:http://cs606926.vk.me/v606926718/15603/0Kauo1bTDi8.jpg 即使JsonString不等于这个“{\”isSuccess\“:false}”,我

  • 我想通过KafkaRest代理产生一个Kafka主题。我已经在模式注册表中创建了一个JSON模式,我希望所有消息都根据注册的模式进行验证,如果它们与模式不匹配,则拒绝。 我的模式 此架构已正确注册并分配了版本1。然后我尝试为和生成一个数据类型错误的消息,但是消息被接受。 请注意,我正在生成一个与模式关联的

  • 我正在使用Spring Boot和[jackson-module-jsonSchema](https://github.com/fasterxml/jackson-module-jsonSchema)构建一个REST API,用于生成JSON模式。我正在寻找一种最好的方法来验证到达我的APIendpoint(Spring控制器)的请求JSON有效负载,该有效负载是根据为公开资源定义的已定义JSON

  • 我有一个这样的应用程序工作流程 (A) 用户代理(浏览器) 假设应用服务器(B)是一个SAML服务提供者,user@domain使用Web浏览器SSO配置文件从浏览器(A)到应用服务器(B)进行身份验证。 在(B)上运行的应用程序如何向user@domain.com的REST服务(C)进行身份验证?(假设B和C都是同一IdP上的SAML SP。) 如果浏览器只是对B和C进行AJAX调用,那么就很简