Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaSpring中,代码是可变的,是否可以用http错误进行响应?_Java_Spring_Http_Error Handling - Fatal编程技术网

在JavaSpring中,代码是可变的,是否可以用http错误进行响应?

在JavaSpring中,代码是可变的,是否可以用http错误进行响应?,java,spring,http,error-handling,Java,Spring,Http,Error Handling,我有一个微服务,它得到了另一个的响应。根据我得到的回应,我需要做出相应的回应。我没有可以收到的错误代码的完整列表,所以问题是-我可以为自己的响应动态生成错误代码吗?从我在spring中看到的情况来看,响应是在代码中预定义的。我需要灵活变通 例如: 我收到一个409我会用409回复 我收到400,我会回复400 我收到一个XXX代码,我会回复XXX 尝试以下代码:(示例代码) @RequestMapping(value=“/validate”,method=RequestMethod.GET,pr

我有一个微服务,它得到了另一个的响应。根据我得到的回应,我需要做出相应的回应。我没有可以收到的错误代码的完整列表,所以问题是-我可以为自己的响应动态生成错误代码吗?从我在spring中看到的情况来看,响应是在代码中预定义的。我需要灵活变通

例如:

我收到一个409我会用409回复

我收到400,我会回复400

我收到一个XXX代码,我会回复XXX

尝试以下代码:(示例代码)

@RequestMapping(value=“/validate”,method=RequestMethod.GET,products=“application/json”)
公共响应验证程序(@QueryParam(“jsonInput”)最终字符串jsonInput){
int numberHTTPDesired=400;
ErrorBean responseBean=新的ErrorBean();
responseBean.setError(“错误”);
setMessage(“验证错误!”);
返回新的ResponseEntity(responseBean,HttpStatus.valueOf(numberHTTPDesired));
}

我使用以下概念研究过这样一个用例。尝试跨micro服务创建一般异常。将异常中的两个参数作为错误消息,另一个作为错误代码。从被调用的服务抛出异常,并在rest模板或假客户端调用中捕获调用服务中的相同异常

public class MyException extends Exception {

  private String errorCode;

  public MyException() {
     super();
  }

  public MyException(String message, String errorCode) {
    super(message);
    this.errorCode = errorCode;
  }
} 
--


我自己尝试了一种变体,突然间这不是一个可行的解决方案。此解决方案中未设置控制器的响应代码。我将得到一个类似{errorCode=400}的响应,但控制器的实际响应代码类似于200。这是一个通用的解决方案,我们可以在遇到MyException(或其他异常)时发送响应代码(从控制器抛出。该响应代码可以通过正在调用的服务中的全局API异常处理程序发送。
public class MyException extends Exception {

  private String errorCode;

  public MyException() {
     super();
  }

  public MyException(String message, String errorCode) {
    super(message);
    this.errorCode = errorCode;
  }
} 
    try {
        return myApiService.getUser();//call to myApiService microservice
    } catch (MyException e) {
        logger.error("Error: {}", e.getMessage());
        throw new MyException(e.getMessage(), e.getCode());
    }