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

重新设置模板尝试捕获[重复]

淳于乐池
2023-03-14

我正在使用下面的Java(Spring 2.0)代码从Web服务读取响应:

public ResponseEntity<?> getTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<?> myResponse= restTemplate.postForEntity(
            myUrl, 
            myRequestObj, 
            MyResponseObj.class);
            
    return myResponse;
}

但是,如果myUrl Web服务返回HttpStatus。错误的_请求(400),未将其分配给myResponse并引发错误,因此没有ResponseBy,我需要将请求包装在try-catch块中。这是正确的还是有办法解决这个问题?此外,这是否意味着myUrl Web服务永远不应该故意(通过编程)将myResponseObj的HttpStatus设置为HttpStatus。错误的请求?因此,即使myRequestObj包含错误数据,myUrl Web服务仍应将响应状态设置为200的ie HttpStatus。没有内容。欢迎对如何正确执行此操作发表任何意见。

共有1个答案

爱博达
2023-03-14

这是正确的还是有办法解决这个问题?

您描述的行为是由Spring的Detault错误处理程序定义的,它在400-499范围内的状态代码的情况下抛出一个HttpClientErrorExc0019,在500-599范围内的状态代码的情况下抛出一个HttpServerErrorExc0019,以及一个>如果状态代码未知,则为Unknown nHttpStatusCodeExcture。要处理此类错误代码,您可以捕获异常或注册此处所述的自定义异常处理程序。

此外,这是否意味着myUrl Web服务永远不应该故意(通过编程)将myResponseObj的HttpStatus设置为HttpStatus。错误的请求?

根据RFC 7231,状态代码400用于指示服务器不能或不会处理请求,因为客户端在创建请求时出错(例如,格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由)。因此,您可以自由使用该状态代码向客户指示此类行为。

 类似资料:
  • 前几天,我在我们的一个项目中看到一些代码,它们使用try-catch并重新抛出捕获的异常,如下所示: 除了catch块中的异常之外,没有做任何其他操作,所以我甚至不确定它为什么会被抛出。我看不出再次抛出同一个异常并对该异常不做任何处理有什么好处。 如果重新抛出catch块中捕获的异常,C#如何处理?它是否陷入了无限抛接球循环?还是说它最终会放弃试一试?

  • 鉴于: 我想尝试,并重试,连接到服务器3次才放弃。 我可以把整个try/catch放在一个循环中,但是这是否符合Java的“最佳实践”。从我对该主题的回忆来看,这将是对语句的误用。再说一次,我可能完全错了。你怎么认为?

  • 我不知道为什么try-catch语句不起作用: 这是代码,我只是想做InputMismatchException,以防有人输入无效的东西,如283479234729472983472984723或字符串等。 但是当我运行它时,我输入了这样的内容,它不让我用扫描仪再试一次,它只是跳到: 它没有给我进入另一个。

  • 有可能在SWIFT中捕捉异常吗?给定以下代码: 有可能防止异常使整个程序崩溃吗?也就是说,在Objective-C中,与以下内容相对应的Swift等价是什么:

  • 我有一个java gui应用程序,应该处理异常。这是我的程序的总体思想:它应该接受整数类型的输入。输入对话框应该引起一个异常,该异常应该被捕获并打印消息“坏数字”。但是,我的问题是,如果用户输入一个空字符串和/或错误的格式号,我怎么能得到重复的JPanelInput。此外,如果用户选择CANCEL选项,则跳出JOptionPane。 更新:

  • 问题内容: 如何在catch块中实现代码? 问题答案: 不建议这样做,这可能会在程序中引起严重的问题。例如,如果数据库关闭了怎么办? 但是,这是循环执行的方法: 更新: 令人失望的先生在下面的评论中提到:该方法将执行暂停指定的毫秒数。没有错误是完全随机的,大多数错误只能通过 再次尝试 才能起作用,因为两次尝试之间的时间有所变化。暂停执行线程将为发生这种情况提供更大的机会(例如,数据库引擎有更多的启