首页 文章

请求错误(invalid_request)spring rest api

提问于
浏览
0

我使用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)无法处理您的请求 . 无法处理请求这可能是由于配置错误或可能是格式错误的请求造成的 .

任何人都可以帮助我理解问题以及如何解决它?这段代码工作正常,但在我的办公室里,我坐着 behind proxy network ,这段代码就像这样失败!有谁知道为什么会这样!

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

2017-08-25 16:43:18.325 INFO 1056 --- [main] swsmmaRequestMappingHandlerAdapter:寻找@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 --- [main] swsmmaRequestMappingHandlerMapping:将“{[/ greeting],methods = [GET]}”映射到公共招呼上 . 祝贺你好.GreetingController.greeting (java.lang.String)2017-08-25 16:43:18.422 INFO 1056 --- [main] swsmmaRequestMappingHandlerMapping:将“{[/ 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 --- [main] swsmmaRequestMappingHandlerMapping:映射“{[/ error],产生= [text / html]}“on public 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 --- [main] oswshandler.SimpleUrlHandlerMapping:将URL路径[/ webjars /]映射到[class org.springframe]类型的处理程序work.web.servlet.resource.ResourceHttpRequestHandler] 2017-08-25 16:43:18.444 INFO 1056 --- [main] oswshandler.SimpleUrlHandlerMapping:映射URL路径[/]到类型为[class org.springframework.web]的处理程序.servlet.resource.ResourceHttpRequestHandler] 2017-08-25 16:43:18.495 INFO 1056 --- [main] oswshandler.SimpleUrlHandlerMapping:将URL路径[/**/favicon.ico]映射到[class org]类型的处理程序上 . springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-08-25 16:43:18.633 INFO 1056 --- [main] osjeaAnnotationMBeanExporter:在启动时为JMX曝光注册bean 2017-08-25 16:43:18.817 INFO 1056 --- [main] sbcetTomcatEmbeddedServletContainer: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类:

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

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

    @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 注释的类的包的子包中,以便组件扫描程序可以看到它 .

相关问题