简体   繁体   English

如何在 React.js 中显示服务器(Java)异常消息

[英]How to show server (Java) Exception message in React.js

I am not able to see the message (in React.js catch block) set while throwing Exception (by server in Java).在抛出异常(由 Java 中的服务器)时,我无法看到设置的消息(在 React.js 捕获块中)。

Situation: User wants to perform some action (via myService), some verification w.r.t action can be done only on back-end, if that fails how to show the user what was the reason of failure?情况:用户想要执行一些操作(通过 myService),一些验证 w.r.t 操作只能在后端完成,如果失败如何向用户显示失败的原因是什么?

Service (Java):服务(Java):

@GetMapping(path = {/*Servive_path*/}, produces = APPLICATION_JSON_VALUE)
public MyClass myService(@RequestParam String param) {
    throw new RuntimeException("This is error message");
}

Action (React.js):动作(React.js):

const myServive = (param) => {
  return async (dispatch, getState) => {
    return request({
      url: ENDPOINTS.MY_SERVICE,
      method: methods.GET,
      params: { param }
    })
      .then(res => {
        dispatch(saveResult(res));
        dispatch(
          notify({
            title: "Successful",
            message: "It was successfully.",
            status: 200,
            dismissAfter: CONFIG.NOTIFICATION_TIMEOUT
          })
        );
      })
      .catch(err => {
        console.log("err.data: ", err.data); //Output-> err.data: 
        console.log("err.message: ", err.message); //Output-> err.message: undefined
        dispatch(
          notify({
            title: "Some error occured",
            message: **//Want to set the error message**,
            status: "error",
            dismissAfter: CONFIG.NOTIFICATION_TIMEOUT
          })
        );
      });
  };
};

Want to show the exception message by setting value in massage in catch block of action.希望通过在 catch 动作块中设置按摩值来显示异常消息。

Output Output

err.data: ""
err.message: undefined

Also,还,

err.status: 500
err.request.response: ""
err.request.responseText: ""
err.request.responseType: ""
err.request.status: 500
err.request.statusText: ""

Please help.请帮忙。

By default in case of exception Spring return http status 500 with Content-Type: text/html;charset=UTF-8 and generates html page with error description.默认情况下,如果出现异常 Spring 返回 http 状态 500,Content-Type: text/html;charset=UTF-8并生成带有错误描述的 html 页面。 Your error description will be in the last line of this page after您的错误描述将在此页面的最后一行之后

<div>There was an unexpected error (type=Internal Server Error, status=500).</div>

and will look like看起来像

<div>This is error message</div>

Of course you can write crutch in your code and parse this page using React, but I wouldn't recommend so.当然,您可以在代码中编写拐杖并使用 React 解析此页面,但我不建议这样做。 It's much better to add Controller advice and write custom exception handling.最好添加Controller 建议并编写自定义异常处理。 In your case something like this在你的情况下是这样的

import lombok.Value;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class ErrorHandler {

    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ExceptionRestResponse handleCustomException(Exception exception) {
        return new ExceptionRestResponse(500, exception.getMessage());
    }

    @Value
    public static class ExceptionRestResponse {
        int code;
        String message;
    }
} 

Then you will get response with Content-Type: application/json which will look like然后你会得到 Content-Type: application/json的响应,看起来像

{
    "code": 500,
    "message": "This is error message"
} 

You can use the ResponseStatusException to send error message to reactjs .您可以使用ResponseStatusException将错误消息发送到reactjs

@RequestMapping(method = RequestMethod.GET, value = "/get")
public List<MyInfo> getInfo(){
   try {
          // code to return
       } catch (InvalidObjectException | InvalidOperationException | OperationNotPermittedException | UserPermissionNotAvailableException e) {
    // throwing custom exceptions
    throw new ResponseStatusException(HttpStatus.FORBIDDEN, e.getMessage(), e);
        } 
   catch (Exception e) {
        throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage(), e);
       }
   }

Instead of e.getMessage() , you may use a specific error message.您可以使用特定的错误消息代替e.getMessage()

Run console.error(error) to see the structure of the error response and display it accordingly.运行console.error(error)以查看错误响应的结构并相应地显示它。 The error response may look like this:错误响应可能如下所示:

"error" : {
     "status": 403,
     "statusText": "FORBIDDEN",
     "message": "User does not have permission to perform this operation",
     "timestamp": "2020-05-08T04:28:32.917+0000"
     ....
}

More here: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/server/ResponseStatusException.html更多信息: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/server/ResponseStatusException.ZFC35FDC70D5FC69D269883A82E2C

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何像 React.js 一样在 Java 中进行实时值更改 - How to do a realtime value change in Java like React.js React.JS app on one server and Java API, Ubuntu, Apache Tomcat 9 Web server on second server - React.JS app on one server and Java API, Ubuntu, Apache Tomcat 9 Web server on second server React.js 服务器端渲染与 Java [没有 Node.js] - React.js server side rendering with Java [without Node.js] React.js + Java Spring中的类属性 - Class properties in React.js + Java Spring React.JS和Java之间的兼容性 - compatibility between React.JS and java 如何在邮递员中显示异常消息? - How to show exception message in postman? 如何从我的 react.js 前端的后端(Java Spring Boot)检索 JWT 令牌? - How to retrieve JWT token from back-end (Java Spring Boot) in my react.js front-end? 如何将认证系统与 spring 引导 jwt 连接到 React.js - How to connect authentication system with spring boot jwt to React.js 调用getNextException以查看原因:如何使Hibernate / JPA显示数据库服务器消息以查找异常 - Call getNextException to see the cause : How to make Hibernate / JPA show the DB server message for an exception 使用forkJoinPool时如何在未捕获的java异常消息中显示堆栈跟踪 - How to show stack trace in uncaught java exception message when using forkJoinPool
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM