无法访问Spring Boot and Jersey应用程序中的某些控制器 [英] Cannot access some controllers in a Spring Boot and Jersey application

查看:138
本文介绍了无法访问Spring Boot and Jersey应用程序中的某些控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在访问某些控制器时遇到了一个小问题.当我向/发送请求时,我得到一个HTTP 404,对于movies路径也是如此.

I have a small problem to access some controllers. When I send a request to /, I a get an HTTP 404, and the same for the movies path.

package com.emo.server; 


@Configuration
@ComponentScan({"com.emo.server", "com.emo.server.controller"})
@EnableAutoConfiguration
public class App {
    public static void main(String[] args) {
    SpringApplication.run(App.class, args);
}


@Path("/")
public String home() {
    return "Hello World";
}


@Configuration
@EnableResourceServer
protected static class ResourceServer extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http            
            .authorizeRequests().antMatchers("/movies").permitAll()
            .and()
            .authorizeRequests()
            .antMatchers("/test")
            .access("#oauth2.hasScope('read')");
        // @formatter:on
    }

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.resourceId("test");
    }

}


@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        // @formatter:off
        clients.inMemory()
                .withClient("my-trusted-client")
                .authorizedGrantTypes("password", "authorization_code", "refresh_token", "implicit")
                .authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
                .scopes("read", "write", "trust")
                .resourceIds("test")
                .accessTokenValiditySeconds(60)
                .and()
                .withClient("my-client-with-secret")
                .authorizedGrantTypes("client_credentials", "password")
                .authorities("ROLE_CLIENT")
                .scopes("read")
                .resourceIds("test")
                .secret("secret");
        // @formatter:on
    }

}

MovieController的一部分:

A part of the MovieController:

package com.emo.server.controller;

@Component
@Path("/movies")
@Produces(MediaType.APPLICATION_JSON)
public class MovieController {

    private static final Logger LOGGER = LoggerFactory.getLogger(MovieController.class);

    @GET
    @Path("/")
    public Response getMovies() {
        System.out.println("Just a test after ....");
    }

我希望从中获得一个测试,但是我得到了404.

From this one, I hope a get just a test after, but I got a 404.

控制台部分:

> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:8080
> Accept: */*
> 
< HTTP/1.1 404 Not Found
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Frame-Options: DENY
< X-Application-Context: application
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Wed, 07 Oct 2015 19:15:20 GMT
< 
* Connection #0 to host localhost left intact
{"timestamp":1444245320491,"status":404,"error":"Not Found","message":"No message available","path":"/"}

我的项目图片:

我尝试使用resourceConfig注册我的控制器,但是发生了同样的事情.

I've tried to registrer my controllers with the resourceConfig, but it happens the same thing.

我可以访问某些端点,例如oauth/tokenhealth,....我使用spring-boot和jersey作为Java 8的REST框架.

I can access some endpoints like oauth/token, health,... I use spring-boot and jersey as REST-framework with java 8.

推荐答案

尝试将控制器注释更改为以下内容:

Try to change your controller annotations to something like this:

@Controller
@RequestMapping(value="/movies", produces="application/json)
public class MovieController{

    @RequestMapping(value="/", method=RequestMethod.GET)
    public MyResponseObject getMovies(){
        //you can return a POJO object if you are using a Jackson Mapper
        return new MyResponseObject("foo", "bar");
    }

}

这篇关于无法访问Spring Boot and Jersey应用程序中的某些控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆