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

当参数无效时,将自定义错误作为Json抛出

殷学
2023-03-14

我正在开发一个API,需要抛出和异常,如下所示

"error": "sortBy parameter is invalid"
}

如果sort by参数不是我预先确定的值之一,我有几个参数来做这件事,因为这里是我的控制器的样子

@GetMapping("/api/posts")

    public ResponseEntity<List<Post>> getPostResponse(@RequestParam String tag, Optional<String> sortBy,
            Optional<String> direction) throws InvalidSortBy {

        RestTemplate postResponseTemplate = new RestTemplate();
        URI postUri = UriComponentsBuilder.fromHttpUrl("urlHere")
                                          .queryParam("tag", tag)
                                          .queryParamIfPresent("sortBy", sortBy)
                                          .queryParamIfPresent("direction", direction)
                                          .build()
                                          .toUri();

        ResponseEntity<PostResponse> response = postResponseTemplate.getForEntity(postUri, PostResponse.class);
        ResponseEntity<List<Post>> newResponse = responseService.createResponse(response, sortBy, direction);   
    
         return newResponse;

    }
}

我删除了url,但它可以对传入的数据进行排序,但我需要验证并抛出正确的错误,我真的不知道如何以所需的格式执行,如json,欢迎任何帮助

共有1个答案

胡鸿志
2023-03-14

首先,你需要处理你的异常并根据错误解决它,我建议你为已知的应用程序异常提出错误代码,并在你的异常处理程序中解决它们(使用@ControllerAdvice或@RestControllerAdvice),将错误代码翻译成相应的消息后,将其作为json发送,您可以参考下面的线程,以了解有关以下SO线程的更多详细信息

如何在Spring Boot中将异常抛回JSON

@例外处理程序

@Excepthtml" target="_blank">ionHandler告诉Spring对于给定的异常应该调用我们的哪个方法

@RestControllerAdvice

使用包含@ControllerAdvice的@RestControllerAdvice将周围的类注册为每个@Controller应该知道的内容,并使用@ResponseBody告诉Spring将该方法的响应呈现为JSON

 类似资料:
  • 我试图设置选定的参数作为默认日期的DatePicker的report-datepicker。基本上,我从数据库得到的日期是以下格式: 当我设置状态时,该日期以这种方式显示- 我尝试了将它转换成JavaScript兼容的日期。也尝试了MomentJS,但它也抛出了同样的错误。当我调用在参数,然后一切工作完美。我的意思是,DatePicker显示默认的今天日期。但是当我尝试将自定义日期值设置为Date

  • 错误: 错误:在XMLHttpRequest.HandleError(XHR.JS:99)的createError(createError.js:16)处出现网络错误。CORS策略阻止了从源“http://localhost:3001/user/login”访问“http://localhost:3000”处的XMLHttpRequest:“请求头字段Access-Control-Allog-Or

  • 我在swagger 2.0文件中定义了两个可重用参数: 然后在我的路由定义中(在本例中为GET),我尝试这样引用这两个: 如果我使用一个$ref,它似乎工作正常(没有编译错误),但是如果我尝试两个都使用,它会看着我: 此外,如果我在查询字符串中传递这些参数并输出<code>req.swagger。params</code>,我得到一个空对象。我做错了什么? 这是规范的完整SSCCE,生成相同的错误

  • 在我的spark代码中有gson,它存储在字符串RDD中,我将其转换为键和值。 (1). (2). 但我收到了以下错误消息。谷歌。格森。JsonSyntaxException:java。伊奥。EOFEException:com第1行第2列的输入结束。谷歌。格森。格森。com上的fromJson(Gson.java:813)。谷歌。格森。格森。com上的fromJson(Gson.java:768)

  • 这是我的输入: 它说: 详细资料 我到底做错了什么?

  • 我创建了一个从HashMap中删除学生的方法。当id为NULL时,它会抛出一个异常。有人知道它为什么不起作用吗? 公共类应用程序{public static void main(String[]args){ }