Liferay Jax-RS:无法调用简单的 REST api,得到 403 和 405

Posted

技术标签:

【中文标题】Liferay Jax-RS:无法调用简单的 REST api,得到 403 和 405【英文标题】:Liferay Jax-RS : Unable to call simple REST apis, getting 403 and 405 【发布时间】:2021-12-06 06:57:28 【问题描述】:

我正在使用 Liferay 7.3。

尝试使用 JAX-RS 构建 Rest API,我已按照此处的官方文档生成令牌 https://help.liferay.com/hc/en-us/articles/360018166411-JAX-RS#using-oauth-20-to-invoke-a-jax-rs-web-service

@GET 得到 403 [Forbidden],@POST 得到 405 [method not allowed]

package com.liferay.jaxrstest.application;

import java.util.Collections;
import java.util.Set;

import javax.ws.rs.*;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.jaxrs.whiteboard.JaxrsWhiteboardConstants;

@Component(
    property = 
        JaxrsWhiteboardConstants.JAX_RS_APPLICATION_BASE + "=/greetings",
        JaxrsWhiteboardConstants.JAX_RS_NAME + "=Greetings.Rest"
    ,
    service = Application.class
)
public class LiferaxJaxRsTestApplication extends Application 

    public Set<Object> getSingletons() 
        return Collections.<Object>singleton(this);
    

    @GET
    @Produces("text/plain")
    public String working() 
        return "It works!";
    

    @GET
    @Path("/morning")
    @Produces("text/plain")
    public String hello() 
        return "Good morning!";
    

    @POST
    @Path("/morning")
    // @Produces("text/plain")
    // @Consumes("application/json")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public String hello(User user) 
        return "Good morning!" + user.getFirstName();
    


class User 

    private String firstName;
    
    public User(String firstName) 
        this.firstName = firstName;
    

    public String getFirstName() 
        return firstName;
    

    public void setFirstName(String firstName) 
        this.firstName = firstName;
    
    
 

【问题讨论】:

【参考方案1】:

如果您尝试测试您创建的端点之一,您应该使用为其创建的路径。

要测试早安 GET 端点,您应该向 URL 发出 GET 请求:

http://localhost:8080/o/greetings/morning

……没有身体。当您使用 OAuth2 时,您必须使用 Postman 中的“授权”选项卡传递令牌。在那里,您可以配置如何获取和使用新令牌。

我还考虑在门户控制面板中的 OAuth2 配置中,您在“范围”选项卡中为Greetings.Rest 服务选中了GETPOST 框。

最后,要获取clientIdclientSecret,请转到

控制面板 → 配置 → OAuth2 管理。

【讨论】:

以上是关于Liferay Jax-RS:无法调用简单的 REST api,得到 403 和 405的主要内容,如果未能解决你的问题,请参考以下文章

Liferay:如何从布局集中检索布局?

Liferay 7 无法设置全局会话属性

我无法在 Web 内容中选择类别。 (Liferay 7.4.2)

在用于 OSGi 的 JAX-RS 白板的参考实现中,啥调用 createWhiteboard(..)?

多个 Ajax 调用 liferay portlet

无法将 portlet [portletname] 的角色与角色名称 [rolename] liferay 6.1 链接