请求错误(invalid_request)spring rest api

时间:2017-08-25 09:31:12

标签: rest web-services api spring-boot http-proxy

我使用Spring启动和Rest模板编写了一个Rest API。最简单的一个。这是我在控制器中编写的代码。

package wsJson;

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class RestCon {

    private AtomicLong id;

    public Bean b;
    @RequestMapping("/bean")
    public Bean getBeans(@RequestParam(value="name")String name){
        return new Bean(id.incrementAndGet(), name);

    }

}

Bean很简单,主类只运行Spring Boot App。 每当我运行代码时,它都在localhost:8080中运行。但是当我转到URL时 http://localhost:8080/api/bean?name=User1

它给出了

  

请求错误(invalid_request)

     

您的请求无法处理。请求无法处理这个   可能是由于配置错误或可能是格式错误造成的   请求。

有谁能帮我理解这个问题以及如何解决它? 这段代码工作正常,但在我的办公室里,我坐在后面的代理网络,这段代码就像这样失败!有谁知道为什么会这样!

修改: 运行应用程序后,我可以在进入控制器后看到以下内容登录到控制台:

  

2017-08-25 16:43:18.325 INFO 1056 --- [主要]   s.w.s.m.m.a.RequestMappingHandlerAdapter:寻找   @ControllerAdvice:   org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@d3d15a:   启动日期[Fri Aug 25 16:43:16 IST 2017];上下文层次结构的根   2017-08-25 16:43:18.419 INFO 1056 --- [主要]   s.w.s.m.m.a.RequestMappingHandlerMapping:已映射   “{[/ greeting],methods = [GET]}”公开招呼。祝贺   hello.GreetingController.greeting(java.lang.String)2017-08-25   16:43:18.422 INFO 1056 --- [主要]   s.w.s.m.m.a.RequestMappingHandlerMapping:将“{[/ error]}”映射到   上市   org.springframework.http.ResponseEntity>   org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)   2017-08-25 16:43:18.422 INFO 1056 --- [主要]   s.w.s.m.m.a.RequestMappingHandlerMapping:已映射   “{[/ error],produ = [text / html]}”上市   org.springframework.web.servlet.ModelAndView   org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)   2017-08-25 16:43:18.444 INFO 1056 --- [主要]   o.s.w.s.handler.SimpleUrlHandlerMapping:映射的URL路径   [/ webjars / ]到[class]类型的处理程序   org.springframework.web.servlet.resource.ResourceHttpRequestHandler]   2017-08-25 16:43:18.444 INFO 1056 --- [主要]   o.s.w.s.handler.SimpleUrlHandlerMapping:映射的URL路径[/ ]到   类型的处理程序[类   org.springframework.web.servlet.resource.ResourceHttpRequestHandler]   2017-08-25 16:43:18.495 INFO 1056 --- [主要]   o.s.w.s.handler.SimpleUrlHandlerMapping:映射的URL路径   [/**/favicon.ico]到[class]类型的处理程序   org.springframework.web.servlet.resource.ResourceHttpRequestHandler]   2017-08-25 16:43:18.633 INFO 1056 --- [主要]   o.s.j.e.a.AnnotationMBeanExporter:为JMX注册bean   启动曝光2017-08-25 16:43:18.817 INFO 1056 --- [
  main] s.b.c.e.t.TomcatEmbeddedServletContainer:Tomcat开始了   港口:8080(http)2017-08-25 16:43:18.833 INFO 1056 --- [
  main] hello.Application:启动应用程序   在3.063秒(JVM运行3.729)

主要课程:

package wsJson;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);

    }

}

bean class:

package wsJson;


public class Bean {

    public long id;
    public String name;

    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Bean(long id, String name) {
        super();
        this.id = id;
        this.name = name;
    }

}

使用spring-boot 1.5.6-RELEASE

制作的应用程序

1 个答案:

答案 0 :(得分:0)

这与你的spring-boot应用程序无关。 如果您的应用程序日志中有异常,请告诉我们堆栈跟踪。在您的代码段中,代码段未初始化,因此您的代码无法正常工作: 这是我测试的代码示例:

@SpringBootApplication
@RestController
@RequestMapping("/api")
public class TestApplication {

    private AtomicLong id = new AtomicLong();

    @RequestMapping("/bean")
    public String getBeans(@RequestParam(value="name")String name){
        return new Bean(id.incrementAndGet(), name).toString();
    }

    class Bean{
        public Bean(long l, String name) {
        }
    }
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}

在没有该代理的情况下在本地测试您的应用程序,以确保您的应用程序正常运行。

您发布了应用启动日志,看起来您的控制器不是映射器。也许您的控制器不会被应用程序扫描。 您的控制器必须位于包含由@SpringBootApplication注释的类的包的子包中,以便组件扫描程序可以看到它。