- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 dropwizard 和 STS 开发 ReSTful API。这是出于学习目的,所以我没有创建数据库,我只是将值存储在静态数据 HashMap 中。
我通过 POST 添加一本带有 JSON 请求“request.json”的新书,然后使用“BOOKRESOURCE.JAVA”存储值,并使用“BOOKREPOSITORY”保存到内存中。我得到的响应是“response.json”
自从我在域中添加 @JsonProperty 以匹配 request.json 以来,我得到了两个发布日期。在此之前,它运行良好。
下面附上代码,我不知道要调试什么。
域名/BOOK.JAVA
package edu.sjsu.cmpe.library.domain;
import java.util.List;
import org.hibernate.validator.constraints.NotEmpty;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Book {
private long isbn;
@NotEmpty
private String title;
@NotEmpty
@JsonProperty("publication-date")
private String pubdate;
private String language;
@JsonProperty("num-pages")
@NotEmpty
private int numPages;
private String status = "available";
@JsonProperty("authors")
private List<Author> author;
/*add more fields here
ISBN (Key) # You will generate this key.
Title (Required field)
Publication Date (Required field)
Language (Optional field)
Number of Pages (Optional field)
Status {available, checked-out, in-queue, or lost} # default to ‘available’
*/
/**
* @return the isbn
*/
public long getIsbn() {
return isbn;
}
/**
* @param isbn
* the isbn to set
*/
public void setIsbn(long isbn) {
this.isbn = isbn;
}
/**
* @return the title
*/
public String getTitle() {
return title;
}
/**
* @param title
* the title to set
*/
public void setTitle(String title) {
this.title = title;
}
public String getPublicationDate() {
return pubdate;
}
public void setPublicationDate(String date) {
this.pubdate = date;
}
public String getLanguage() {
return language;
}
/**
* @param title
* the title to set
*/
public void setLanguage(String language) {
this.language = language;
}
public int getNumPages() {
return numPages;
}
/**
* @param isbn
* the isbn to set
*/
public void setNumPages(int numPages) {
this.numPages = numPages;
}
public String getStatus() {
return status;
}
/**
* @param title
* the title to set
*/
public void setStatus(String status) {
this.status = status;
}
public List<Author> getAuthor() {
return author;
}
public void setAuthor(List<Author> author) {
this.author = author;
}
}
请求.json
{
"title" : "Programming Amazon EC2",
"publication-date" : "2/11/2011",
"language" : "eng",
"num-pages": 185,
"status" : "available",
"authors" : [
{ "name" : "Jurg Vliet" },
{"name" : "FlaviaPagenelli"} ]
}
BOOKRESOURCE.JAVA
@Path("/v1/books")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class BookResource {
/** bookRepository instance */
private final BookRepositoryInterface bookRepository;
// private final ReviewRepositoryInterface reviewrepository;
/**
* BookResource constructor
*
* @param bookRepository
* a BookRepository instance
*/
public BookResource(BookRepositoryInterface bookRepository) {
this.bookRepository = bookRepository;
}
@GET
@Path("/{isbn}")
@Timed(name = "view-book")
public BookDto getBookByIsbn(@Valid @PathParam("isbn") LongParam isbn) {
Book book = bookRepository.getBookByISBN(isbn.get());
BookDto bookResponse = new BookDto(book);
String location = "/books/" + book.getIsbn();
bookResponse.addLink(new LinkDto("view-book", location, "GET"));
bookResponse.addLink(new LinkDto("update-book", location, "PUT"));
bookResponse.addLink(new LinkDto("delete-book", location, "DELETE"));
bookResponse.addLink(new LinkDto("create-review", location + "/reviews", "POST"));
//if (reviewrepository.getAllReviews((Long)isbn.get()).size()==0){
bookResponse.addLink(new LinkDto("get-all-reviews", location + "/reviews", "GET"));
//}// Add other links if needed/
return bookResponse;
}
@POST
@Timed(name = "create-book")
public Response createBook(Book request) {
// Store the new book in the bookRepository so that we can retrieve it.
Book savedBook = bookRepository.saveBook(request);
String location = "/books/" + savedBook.getIsbn();
BookDto bookResponse = new BookDto(savedBook);
bookResponse.addLink(new LinkDto("view-book", location, "GET"));
bookResponse.addLink(new LinkDto("update-book", location, "PUT"));
bookResponse.addLink(new LinkDto("delete-book", location, "DELETE"));
bookResponse.addLink(new LinkDto("create-review", location + "/reviews", "POST"));
// Add other links if needed/
return Response.status(201).entity(bookResponse).build();
}
BOOKREPOSITORY.JAVA
public class BookRepository implements BookRepositoryInterface {
/** In-memory map to store books. (Key, Value) -> (ISBN, Book) */
private final ConcurrentHashMap<Long, Book> bookInMemoryMap;
private static long authID;
/** Never access this key directly; instead use generateISBNKey() */
private long isbnKey;
public BookRepository(ConcurrentHashMap<Long, Book> bookMap) {
checkNotNull(bookMap, "bookMap must not be null for BookRepository");
bookInMemoryMap = bookMap;
isbnKey = 0;
}
/**
* This should be called if and only if you are adding new books to the
* repository.
*
* @return a new incremental ISBN number
*/
private final Long generateISBNKey() {
// increment existing isbnKey and return the new value
return Long.valueOf(++isbnKey);
}
/**
* This will auto-generate unique ISBN for new books.
*/
@Override
public Book saveBook(Book newBook) {
checkNotNull(newBook, "newBook instance must not be null");
// Generate new ISBN
Long isbn = generateISBNKey();
newBook.setTitle(newBook.getTitle());
newBook.setIsbn(isbn);
newBook.setLanguage(newBook.getLanguage());
newBook.setNumPages(newBook.getNumPages());
newBook.setPublicationDate(newBook.getPublicationDate());
newBook.setStatus(newBook.getStatus());
for (int i=0; i< newBook.getAuthor().size(); i++)
{
newBook.getAuthor().get(i).setId(++authID);
}
newBook.setAuthor(newBook.getAuthor());
// TODO: create and associate other fields such as author
// Finally, save the new book into the map
bookInMemoryMap.putIfAbsent(isbn, newBook);
return newBook;
}
响应.JSON
{
"book": {
"isbn": 4,
"title": "Programming Amazon EC2",
"language": "eng",
"status": "available",
"publicationDate": "2/11/2011",//this is the extra field that is not required.
"publication-date": "2/11/2011",
"num-pages": 185,
"authors": [{
"id": 7,
"name": "Jurg Vliet"
}, {
"id": 8,
"name": "FlaviaPagenelli"
}]
},
"links": [{
"rel": "view-book",
"href": "/books/4",
"method": "GET"
}, {
"rel": "update-book",
"href": "/books/4",
"method": "PUT"
}, {
"rel": "delete-book",
"href": "/books/4",
"method": "DELETE"
}, {
"rel": "create-review",
"href": "/books/4/reviews",
"method": "POST"
}]
}
最佳答案
从类中删除 getPublicationDate()
方法,或将其添加到 @JsonIgnoreProperties
关于java - 在 dropwizard REST API 中返回两个具有相同值的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19020456/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!