Spring MVC - 发生http 404时RestTemplate启动异常

新手上路,请多包涵

我有一个休息服务,当找不到资源时会发送 404 错误。这是我的控制器的来源和发送 Http 404 的异常。

 @Controller
@RequestMapping("/site")
public class SiteController
{

    @Autowired
    private IStoreManager storeManager;

    @RequestMapping(value = "/stores/{pkStore}", method = RequestMethod.GET, produces = "application/json")
    @ResponseBody
    public StoreDto getStoreByPk(@PathVariable long pkStore) {
        Store s = storeManager.getStore(pkStore);
        if (null == s) {
            throw new ResourceNotFoundException("no store with pkStore : " + pkStore);
        }
        return StoreDto.entityToDto(s);

    }
}

@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException
{
    private static final long serialVersionUID = -6252766749487342137L;
    public ResourceNotFoundException(String message) {
        super(message);
    }
}

当我尝试使用此代码使用 RestTemplate 调用它时:

 ResponseEntity<StoreDto> r = restTemplate.getForEntity(url, StoreDto.class, m);
 System.out.println(r.getStatusCode());
 System.out.println(r.getBody());

我收到这个例外:

 org.springframework.web.client.RestTemplate handleResponseError
ATTENTION: GET request for "http://........./stores/99" resulted in 404 (Introuvable); invoking error handler
org.springframework.web.client.HttpClientErrorException: 404 Introuvable

我在想我可以探索我的 responseEntity 对象并使用 statusCode 做一些事情。但是异常是启动,我的应用程序出现故障。

restTemplate 是否有特定配置不发送异常但填充我的 ResponseEntity。

原文由 loic 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 784
1 个回答

据我所知,您无法获得实际的 ResponseEntity,但可以从异常中获取状态代码和正文(如果有):

 try {
    ResponseEntity<StoreDto> r = restTemplate.getForEntity(url, StoreDto.class, m);
}
catch (final HttpClientErrorException e) {
    System.out.println(e.getStatusCode());
    System.out.println(e.getResponseBodyAsString());
}

原文由 Squatting Bear 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题