【问题标题】:Huge JSON returned instead of a simple one返回了巨大的 JSON 而不是一个简单的 JSON
【发布时间】:2019-06-01 17:21:28
【问题描述】:

我正在编写非常基本的算法来更好地理解 Rest。

我写了以下代码:

@RestController
class DoubleController {

  @GetMapping("/doubling")
  public Object doubling(@RequestParam Integer input) {
    if (input != null) {
      return new DoubledValue(input);
    }
    return new Error("Please provide an input");
  }
}

虽然如果给出输入它会很好地工作,但否则它会返回一个巨大的 JSON,而不仅仅是预期的。我的错误类只有一个字段,我想返回类似

{
 "error": "Please provide an input!"
}

我收到的 JSON 消息如下:

{"cause":null,"stackTrace":[{"methodName":"doubling","fileName":"DoubleController.java","lineNumber":16,"className":"com.example.demo .Controllers.DoubleController","nativeMethod":false},{"methodName":"invoke0","fileName":"NativeMethodAccessorImpl.java","lineNumber":-2,"className":"sun.reflect.NativeMethodAccessorImpl" ,"nativeMethod":true},{"methodName":"invoke","fileName":"NativeMethodAccessorImpl.java","lineNumber":62,"className":"sun.reflect.NativeMethodAccessorImpl","nativeMethod":false },{"methodName":"invoke","fileName":"DelegatingMethodAccessorImpl.java","lineNumber":43,"className":"sun.reflect.DelegatingMethodAccessorImpl","nativeMethod":false},{"methodName" :"invoke","fileName":"Method.java","lineNumber":498,"className":"java.lang.reflect.Method","nativeMethod":false},{"methodName":"doInvoke" ,"fileName":"InvocableHandlerMethod.java","lineNumber":189,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"methodName":"invokeForRequest ","fileName":"InvocableHandlerMethod.java","lineNumber":138,"className":"org.springframework.web.method.support.InvocableHandlerMethod","nativeMethod":false},{"methodName":"invokeAndHandle ","fileName":"ServletInvocableHandlerMethod.java","lineNumber":102,"className":"org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod","nativeMethod":false},{"methodName ":"invokeHandlerMethod","fileName":"RequestMappingHandlerAdapter.java","lineNumber":895,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod":false} ,{"methodName":"handleInternal","fileName":"RequestMappingHandlerAdapter.java","lineNumber":800,"className":"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter","nativeMethod ":false},{"methodName":"handle","fileName":"AbstractHandlerMethodAdapter.java","lineNumber":87,"className":"org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter", “本机方法”:假},{"methodName":"doDispatch","fileName":"DispatcherServlet.java","lineNumber":1038,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false}, {"methodName":"doService","fileName":"DispatcherServlet.java","lineNumber":942,"className":"org.springframework.web.servlet.DispatcherServlet","nativeMethod":false},{" methodName":"processRequest","fileName":"FrameworkServlet.java","lineNumber":1005,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"methodName" :"doGet","fileName":"FrameworkServlet.java","lineNumber":897,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"methodName":" service","fileName":"HttpServlet.java","lineNumber":634,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"methodName":"service"," fileName":"FrameworkServlet.java","lineNumber":882,"className":"org.springframework.web.servlet.FrameworkServlet","nativeMethod":false},{"methodName":"service","fileName" :"ht pServlet.java","lineNumber":741,"className":"javax.servlet.http.HttpServlet","nativeMethod":false},{"methodName":"internalDoFilter","fileName":"ApplicationFilterChain.java" ,"lineNumber":231,"className":"org.apache.catalina.core.ApplicationFilterChain","nativeMethod":false},{"methodName":"doFilter","fileName":"ApplicationFilterChain.java"," lineNumber":166,"className":"org.apache.catalina.core.ApplicationFilterChain","nativeMethod":false},{"methodName":"doFilter","fileName":"WsFilter.java","lineNumber" :53,"className":"org.apache.tomcat.websocket.server.WsFilter","nativeMethod":false},{"methodName":"internalDoFilter","fileName":"ApplicationFilterChain.java","lineNumber" :193,"className":"org.apache.catalina.core.ApplicationFilterChain","nativeMethod":false},{"methodName":"doFilter","fileName":"ApplicationFilterChain.java","lineNumber":166 ,"className":"org.apache.catalina.core.ApplicationFilterChain","nativeMethod":false},{"methodName":"doFilterInternal","fileName":"RequestContextFilter.jav a","lineNumber":99,"className":"org.springframework.web.filter.RequestContextFilter","nativeMethod":false},{"methodName":"doFilter","fileName":"OncePerRequestFilter.java" ,"lineNumber":107,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"methodName":"internalDoFilter","fileName":"ApplicationFilterChain.java"," lineNumber":193,"className":"org.apache.catalina.core.ApplicationFilterChain","nativeMethod":false},{"methodName":"doFilter","fileName":"ApplicationFilterChain.java","lineNumber" :166,"className":"org.apache.catalina.core.ApplicationFilterChain","nativeMethod":false},{"methodName":"doFilterInternal","fileName":"FormContentFilter.java","lineNumber":92 ,"className":"org.springframework.web.filter.FormContentFilter","nativeMethod":false},{"methodName":"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":107," className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"methodName":"internalDoFilter","fileName" :"ApplicationFilterChain.java","lineNumber":193,"className":"org.apache.catalina.core.ApplicationFilterChain","nativeMethod":false},{"methodName":"doFilter","fileName":" ApplicationFilterChain.java","lineNumber":166,"className":"org.apache.catalina.core.ApplicationFilterChain","nativeMethod":false},{"methodName":"doFilterInternal","fileName":"HiddenHttpMethodFilter. java","lineNumber":93,"className":"org.springframework.web.filter.HiddenHttpMethodFilter","nativeMethod":false},{"methodName":"doFilter","fileName":"OncePerRequestFilter.java" ,"lineNumber":107,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"methodName":"internalDoFilter","fileName":"ApplicationFilterChain.java"," lineNumber":193,"className":"org.apache.catalina.core.ApplicationFilterChain","nativeMethod":false},{"methodName":"doFilter","fileName":"ApplicationFilterChain.java","lineNumber" :166,"className":"org.apache.catalina.core.ApplicationFilterChain","nativeMethod":false},{"methodNa我":"doFilterInternal","fileName":"CharacterEncodingFilter.java","lineNumber":200,"className":"org.springframework.web.filter.CharacterEncodingFilter","nativeMethod":false},{"methodName" :"doFilter","fileName":"OncePerRequestFilter.java","lineNumber":107,"className":"org.springframework.web.filter.OncePerRequestFilter","nativeMethod":false},{"methodName":" internalDoFilter","fileName":"ApplicationFilterChain.java","lineNumber":193,"className":"org.apache.catalina.core.ApplicationFilterChain","nativeMethod":false},{"methodName":"doFilter" ,"fileName":"ApplicationFilterChain.java","lineNumber":166,"className":"org.apache.catalina.core.ApplicationFilterChain","nativeMethod":false},{"methodName":"invoke"," fileName":"StandardWrapperValve.java","lineNumber":199,"className":"org.apache.catalina.core.StandardWrapperValve","nativeMethod":false},{"methodName":"invoke","fileName" :"StandardContextValve.java","lineNumber":96,"className":"org.apache.catalina.core.StandardContextValve","nativeMethod":fa lse},{"methodName":"invoke","fileName":"AuthenticatorBase.java","lineNumber":490,"className":"org.apache.catalina.authenticator.AuthenticatorBase","nativeMethod":false} ,{"methodName":"invoke","fileName":"StandardHostValve.java","lineNumber":139,"className":"org.apache.catalina.core.StandardHostValve","nativeMethod":false},{ "methodName":"invoke","fileName":"ErrorReportValve.java","lineNumber":92,"className":"org.apache.catalina.valves.ErrorReportValve","nativeMethod":false},{"methodName ":"invoke","fileName":"StandardEngineValve.java","lineNumber":74,"className":"org.apache.catalina.core.StandardEngineValve","nativeMethod":false},{"methodName": "service","fileName":"CoyoteAdapter.java","lineNumber":343,"className":"org.apache.catalina.connector.CoyoteAdapter","nativeMethod":false},{"methodName":"service ","fileName":"Http11Processor.java","lineNumber":408,"className":"org.apache.coyote.http11.Http11Processor","nativeMethod":false},{"methodName":"process", "文件名":"抽象处理器光。 java","lineNumber":66,"className":"org.apache.coyote.AbstractProcessorLight","nativeMethod":false},{"methodName":"process","fileName":"AbstractProtocol.java"," lineNumber":791,"className":"org.apache.coyote.AbstractProtocol$ConnectionHandler","nativeMethod":false},{"methodName":"doRun","fileName":"NioEndpoint.java","lineNumber" :1417,"className":"org.apache.tomcat.util.net.NioEndpoint$SocketProcessor","nativeMethod":false},{"methodName":"run","fileName":"SocketProcessorBase.java"," lineNumber":49,"className":"org.apache.tomcat.util.net.SocketProcessorBase","nativeMethod":false},{"methodName":"runWorker","fileName":"ThreadPoolExecutor.java"," lineNumber":1149,"className":"java.util.concurrent.ThreadPoolExecutor","nativeMethod":false},{"methodName":"run","fileName":"ThreadPoolExecutor.java","lineNumber":624 ,"className":"java.util.concurrent.ThreadPoolExecutor$Worker","nativeMethod":false},{"methodName":"run","fileName":"TaskThread.java","lineNumber":61,"类名":"org.apache.tomcat.util.thr eads.TaskThread$WrappingRunnable","nativeMethod":false},{"methodName":"run","fileName":"Thread.java","lineNumber":748,"className":"java.lang.Thread" ,"nativeMethod":false}],"localizedMessage":"请 提供输入","message":"请提供输入","suppressed":[]}

我应该如何解决这个问题?提前谢谢你。

【问题讨论】:

    标签: java rest spring-restcontroller


    【解决方案1】:

    请确保您有一个名为 Error 的类,并且您已将其导入 DoubleController 类。

     public class Error implements Serializable {
         private String message;
         public Error() {
         }
         public Error(String message) {
              this.message = message;
         }
         public String getMessage() {
              return message;
         } 
         public void setMessage(String message) {
              this.message = message ;
         } 
     }
    
     import com.yourproject.models.Error;
     @RestController
     class DoubleController {
       ..... 
     } 
    

    【讨论】:

    • 非常感谢!问题是我没有导入我的 Error 类,所以它可能使用了一些内置的 Java 类。
    【解决方案2】:

    您收到的“巨大”JSON 是默认的 Spring Boot 错误消息,可能是因为它找不到匹配的路由。默认情况下,您的处理程序方法需要 some 参数。如果未提供,则无法找到您的处理程序方法。

    尝试将其更改为:

    public Object doubling(@RequestParam(required=false) Integer input) {
    

    【讨论】:

    • 谢谢你,很抱歉我使用的不是真正的描述性术语:)
    • @CsongiNagy 没问题。我去过那里,所以它是完美的描述哈哈
    • 不幸的是,这似乎不是唯一的问题。我设置了 required = false,但没有任何改变。
    • @CsongiNagy 你能发布你得到的 JSON 吗?
    • @CsongiNagy 您可以将其发布为对您原始问题的编辑吗?
    猜你喜欢
    • 2013-12-29
    • 2022-01-01
    • 2015-04-27
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多