多种资源方法匹配请求“POST /.../...”

问题描述 投票:0回答:1

我正在用 Java Resteasy 框架(也使用 Jackson)做一个 REST API。

我试图定义 2 个几乎相等的 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
}

这里 BookAdvanced 类:

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
}

27-Jan-2023 12:33:18.238 WARN [http-nio-8080-exec-39] org.jboss.resteasy.core.registry.SegmentNode.match RESTEASY002142:多种资源方法匹配请求“POST /hello/addbook” .选择一个。匹配方法:[public package1.BookAdvanced prova_gradle_war.HelloWorldResource.addBook(package1.BookAdvanced), public package1.Book prova_gradle_war.HelloWorldResource.addBook(package1.Book)]

jackson resteasy java-ee-7
1个回答
0
投票

匹配 基于请求 URI 而不是请求主体。没有真正的方法来匹配路径并根据身体决定使用的方法。

您可以在检查数据并确定要创建的类型时手动执行某些操作。

© www.soinside.com 2019 - 2024. All rights reserved.