Chúng tôi đang sử dụng Jersey để thực hiện RESTful API bằng cách sử dụng tính năng thú vị của thế hệ WADL tự động.Bao gồm các giá trị có thể có của @PathParam vào WADL
Cũng như một ví dụ chúng ta có phương pháp
@GET
@Path("/{id}/{attribute}")
@Produces(MediaType.APPLICATION_JSON)
public Object getAttributeByID(@PathParam("id") long id, @PathParam("attribute") String attribute) {
....
}
này tạo ra các đoạn sau đây trong WADL:
<param type="xs:string" style="template" name="attribute:.*"/>
Thuộc tính có thể name
, type
, size
và chúng tôi muốn không chỉ để xác nhận giá trị tại thời gian chạy nhưng cũng hiển thị nó trong wadl tạo ra Theo this document tính năng như vậy nên được hỗ trợ bằng cách tạo ra một số thẻ <option>
bên trong <param>
, tôi Tôi mong đợi một cái gì đó như sau:
<param type="aws:Attributes" style="template" name="attribute">
<option value="name"/>
<option value="type"/>
<option value="size"/>
</param>
Vấn đề của tôi là kích hoạt nó với Jersey. Nếu thất bại trong việc tìm tài liệu có liên quan và cho rằng có lẽ nếu tôi thay đổi kiểu của tham số từ String
để enum
tính năng này sẽ làm việc tự động, vì vậy tôi đã thay đổi chữ ký phương pháp để:
@Path("/{id}/{attribute}")
@Produces(MediaType.APPLICATION_JSON)
public Object getAttributeByID(@PathParam("id") long id, @PathParam("attribute") Attribute attribute) {
....
}
nơi
public enum Attribute {
name, type, size
}
nhưng Jersey vẫn tạo thẻ <param>
mà không có tùy chọn và loại tham số vẫn là xs:string
.
Tôi đã cố gắng tìm nó trong mã của Jersey và tìm thấy lớp học com.sun.research.ws.wadl.Option
với chú thích JAXB có liên quan, vì vậy nó có vẻ có liên quan, nhưng tôi không biết cách làm cho nó hoạt động. Tôi đoán vấn đề là trong WadlGeneratorConfig
.
Dưới đây là một phần liên quan của định nghĩa Jersey trong chúng tôi web.xml
<filter>
<filter-name>REST-API</filter-name>
<filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
................
<init-param>
<param-name>com.sun.jersey.config.property.WadlGeneratorConfig</param-name>
<param-value>com.mycompany.resource.OurWADLGenerator</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.mycompany</param-value>
</init-param>
</filter>
nơi OurWADLGenerator
code is:
public class OurWADLGenerator extends WadlGeneratorConfig {
@Override
public List<WadlGeneratorDescription> configure() {
return generator(WadlGeneratorApplicationDoc.class)
.prop("applicationDocsStream", "application-doc.xml")
.generator(WadlGeneratorResourceDocSupport.class)
.prop("resourceDocStream", "resourcedoc.xml").descriptions();
}
}
tôi thiếu gì ở đây? Cảm ơn trước.
'enum công cộng Attribure' nên được 'công khai enum thuộc tính' ... nó đã được sao chép từ mã của bạn hoặc chỉ là một lỗi đánh máy? –
@martinjakubik, chắc chắn đó là lỗi đánh máy. Cảm ơn bạn. Tôi vừa chỉnh sửa bài đăng và sửa lỗi này. – AlexR