jackson Resteasy -多个资源方法匹配请求“POST /.../...”

zrfyljdw  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(125)

我正在使用Java Resteasy框架(也使用Jackson)做一个REST API。
我试图定义两个几乎相等的API端点:

@POST
@Path("/addbook")
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_XML)
public BookAdvanced addBook (BookAdvanced book){...}


@POST
@Path("/addbook")
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_XML)
public Book addBook (Book book){...}

这可能吗?我想要的是,根据到达的xml执行一个或另一个方法
此处预订课程:

package package1;

import javax.xml.bind.annotation.*;
import java.util.Date;

@XmlRootElement(name = "book")
public class Book {
    private Long id;
    private String name;
    private String author;

    @XmlAttribute
    public void setId(Long id) {
        this.id = id;
    }

    @XmlElement(name = "title")
    public void setName(String name) {
        this.name = name;
    }

    @XmlElement(name = "author")
    public void setAuthor(String author) {
        this.author = author;
    }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getAuthor() {
        return author;
    }

    // constructor, getters and setters
}

此处为图书高级类:

package package1;

import javax.xml.bind.annotation.*;
import java.util.Date;

@XmlRootElement(name = "book")
public class BookAdvanced {
    private Long id;
    private String name;
    private String author;
    private int year;

    @XmlAttribute
    public void setId(Long id) {
        this.id = id;
    }

    @XmlElement(name = "title")
    public void setName(String name) {
        this.name = name;
    }

    @XmlElement(name = "author")
    public void setAuthor(String author) {
        this.author = author;
    }

    @XmlElement(name = "year")
    public void setYear(int year) {
        this.year = year;
    }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getAuthor() {
        return author;
    }

    public int getYear() {
        return year;
    }

    // constructor, getters and setters
}

2023年1月27日12:33:18.238警告[http-nio-8080-exec-39]组织.jboss. reteasy.核心.注册表.分段节点.匹配RESTEASY 002142:多个资源方法与请求“POST /hello/addbook”匹配。请选择一个。匹配方法:[公共软件包1.BookAdvanced的prova_gradle_war.您好世界资源.addBook(软件包1.BookAdvanced),公共软件包1.Book的prova_gradle_war.您好世界资源.addBook(软件包1.Book)]

xoshrz7s

xoshrz7s1#

匹配是基于请求URI而不是请求主体的。没有真实的的方法来匹配路径并根据主体决定要使用的方法。
您可以手动检查数据并确定要创建的类型。

相关问题