Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
Java Spring启动处理异常-无法写入HTTP消息_Java_Spring_Spring Boot_Spring Data - Fatal编程技术网

Java Spring启动处理异常-无法写入HTTP消息

Java Spring启动处理异常-无法写入HTTP消息,java,spring,spring-boot,spring-data,Java,Spring,Spring Boot,Spring Data,我想处理以下控制器方法的错误 @GetMapping(value= "search", params = {"id", "!name"}) public ResponseEntity<?> getMovieById(@RequestParam(name = "id") short id) { Movie movie = this.movieService.getMovieById(id); if(null == movie) {

我想处理以下控制器方法的错误

@GetMapping(value= "search", params = {"id", "!name"})
    public ResponseEntity<?> getMovieById(@RequestParam(name = "id") short id) {
        Movie movie = this.movieService.getMovieById(id);
        if(null == movie) {
            throw new MovieNotFoundException("Unable to find moviee with id: " + id);
        }
        return ResponseEntity.ok(movie);
    }

使用弹簧的开箱即用
ControllerAdvice
。您不需要在控制器类中处理异常。只要在发生任何运行时异常时抛出(例如服务组件或DAO)

然后编写如下错误建议:

@ControllerAdvice
class MyErrorAdvice {

    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) //Response Code your want to return
    @ExceptionHandler({MovieNotFoundException.class})
    public void handleMovieNotFoundException(MovieNotFoundException e) {
        log.error("Exception : ", e);
        // Options lines 
    }

    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler({MyOtherException.class})
    public void handleMyOtherException(MyOtherException e) {
        log.error("Exception : ", e);
        // Options lines 
    }
}
就这样。希望这有帮助


最近,我起草了一篇关于

使用弹簧的开箱即用
ControllerAdvice
。您不需要在控制器类中处理异常。只要在发生任何运行时异常时抛出(例如服务组件或DAO)

然后编写如下错误建议:

@ControllerAdvice
class MyErrorAdvice {

    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) //Response Code your want to return
    @ExceptionHandler({MovieNotFoundException.class})
    public void handleMovieNotFoundException(MovieNotFoundException e) {
        log.error("Exception : ", e);
        // Options lines 
    }

    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler({MyOtherException.class})
    public void handleMyOtherException(MyOtherException e) {
        log.error("Exception : ", e);
        // Options lines 
    }
}
就这样。希望这有帮助


最近,我起草了一篇关于

您的电影对象通过响应对象作为响应发送。而响应作为JSON对象通过HTTP

因此,您的电影对象需要JSON字符串化它本身Java反射API自动为您完成这项工作。它会自动调用Movie类中的getter,并创建JSON对象

但是,一些getter可能不会返回相关变量的精确字符串表示形式

Ex:-

public String getUserId() {
    return userId.toHexString();
}
@JsonIgnore
private ObjectId userId; 
在这种情况下,可能会发生httpmessagenetwitableexception

因此,您可以在相应字段上方使用@JsonIgnore注释来忽略它。或者通过getters返回精确的字符串表示形式

Ex:-

public String getUserId() {
    return userId.toHexString();
}
@JsonIgnore
private ObjectId userId; 

您的电影对象通过响应属性对象作为响应发送。而响应作为JSON对象通过HTTP

因此,您的电影对象需要JSON字符串化它本身Java反射API自动为您完成这项工作。它会自动调用Movie类中的getter,并创建JSON对象

但是,一些getter可能不会返回相关变量的精确字符串表示形式

Ex:-

public String getUserId() {
    return userId.toHexString();
}
@JsonIgnore
private ObjectId userId; 
在这种情况下,可能会发生httpmessagenetwitableexception

因此,您可以在相应字段上方使用@JsonIgnore注释来忽略它。或者通过getters返回精确的字符串表示形式

Ex:-

public String getUserId() {
    return userId.toHexString();
}
@JsonIgnore
private ObjectId userId; 

你好请详细说明:你在使用什么软件,做什么?你给出的细节越多,回答就越容易:)你说的软件是什么意思?我正在使用spring引导和spring数据(存储库jpa)以及一个rest控制器。@ScaryWombat如果没有达到这个条件,我将一个system.out放出来,没有显示出来!请详细说明:你在使用什么软件,做什么?你给出的细节越多,回答就越容易:)你说的软件是什么意思?我使用Spring Bug和Spring Data(存储库JPA)和一个REST控制器。@ SracyObBAT它没有达到这个条件,我放了一个So.Out.并且没有显示出这个答案是有效的,考虑一下再多给OP更多的洞察力。现在高兴了吗?卡布拉;)尽管这个答案是有效的,但请仔细考虑一下,给OP更多的洞察力。现在高兴了吗?卡布拉;)