我正在用 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)]
匹配 基于请求 URI 而不是请求主体。没有真正的方法来匹配路径并根据身体决定使用的方法。
您可以在检查数据并确定要创建的类型时手动执行某些操作。