searchBooksByTitleAnd-6ren">
gpt4 book ai didi

java - 如何将对象作为 URI 行中的查询参数传递?

转载 作者:行者123 更新时间:2023-12-02 02:08:09 25 4
gpt4 key购买 nike

您能帮我解释一下我应该如何传递作者值吗?

@GetMapping(value = "/search")
public ResponseEntity<List<Book>> searchBooksByTitleAndAuthor(
@RequestParam(value = "title", required = false) final String title,
@RequestParam(value = "author", required = false) final Author author) {
HttpStatus httpStatus = HttpStatus.OK;
List<Book> books = null;
if (title == null && author == null) {
log.info("Empty request");
httpStatus = HttpStatus.BAD_REQUEST;
} else if (title == null || author == null) {
books = bookService.getBooksByTitleOrAuthor(title, author);
} else {
Optional<Book> book = bookService.getBookByTitleAndAuthor(title, author);
if (book.isPresent()) {
books = Arrays.asList(book.get());
}
}
if (books == null) {
return new ResponseEntity<>(httpStatus);
} else {
return new ResponseEntity<>(books, httpStatus);
}
}

Author 类看起来像:

@Entity
@NoArgsConstructor
@AllArgsConstructor
@Getter
@EqualsAndHashCode
@ToString
public final class Author {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

private String name;

private LocalDate dateOfBirth;

private String bio;
}

在这种情况下使用author或@RequestParam而不是请求正文是一个好方法吗?我考虑过仅请求作者姓名的字符串,但这会影响服务的方法。

最佳答案

根据https://lankydanblog.com/2017/03/11/passing-data-transfer-objects-with-get-in-spring-boot/ ,...您可以(在 author.dateOfBirth 上设置一些转换注释后):

  1. 在字符串参数上使用@RequestParam(并让您的 Controller /某人进行转换):

        ..., @RequestParam(value = "author", required = false) final String author) { 

    ...final Author author = new ObjectMapper().setDateFormat(simpleDateFormat)
    .readValue(author, Author.class);

    在这种情况下,您会请求:

    http://localhost:8080/myApp/search?title=foo&author={"id"="1",...}
  2. 或者:省略@RequestParam,但传递对象(并让 spring 负责转换):

    ...(@RequestParam(value = "title", required = false) final String title,
    final Author author)

    并请求如下:

    http://localhost:8080/myApp/search?title=foo&id=1&name=Donald E. Knuth&...

另请参阅:

关于java - 如何将对象作为 URI 行中的查询参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50429117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com