无法访问 Spring Boot 和 Jersey 应用程序中的某些控制器

Posted

技术标签:

【中文标题】无法访问 Spring Boot 和 Jersey 应用程序中的某些控制器【英文标题】:Cannot access some controllers in a Spring Boot and Jersey application 【发布时间】:2016-01-05 04:45:56 【问题描述】:

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

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 的一部分:

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。

控制台部分:

> 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 注册我的控制器,但它发生了同样的事情。

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

【问题讨论】:

您是否将 Spring Boot 和 Jersey 混为一谈,因为您确实知道自己在做什么,对吧? 嗯。我使用球衣作为 REST 框架。但是我尝试不使用 Jersey,使用默认的 REST-Spring(请求映射),但我得到了同样的错误。 【参考方案1】:

尝试将您的控制器注释更改为如下内容:

@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");
    


【讨论】:

别帮我。我想,这是球衣,我删除了所有球衣依赖项,什么都没有。 你为什么不通过xml配置试试这个? 我脱掉了运动衫,它现在可以工作了。见这里:***.com/questions/33026968/…

以上是关于无法访问 Spring Boot 和 Jersey 应用程序中的某些控制器的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Jersey 和监控 URL

Spring Boot + Jersey

Spring boot、jwt、jersey、spring security和CORS问题

Spring-Boot Jersey:允许 Jersey 提供静态内容

Spring Boot + Jersey 类型过滤器 - 服务的错​​误请求 400 消耗 MULTIPART_FORM_DATA

带有 Jersey 和 Spring Security OAuth2 的 Spring Boot