我是新来的Spring Web通量/Reactor核心,并试图执行以下功能:
>
如果返回用户,则返回“用户”类型的响应实体。如果为空,则返回“字符串”类型的响应实体
以下代码给出了一个类型错误,因为. defaultIf空()期望类型为user的响应实体。您能建议正确的运算符/方法来实现此功能吗?
@PostMapping("api/user/login/webApp")
public Mono<ResponseEntity> login(@RequestBody Credentials credentials, ServerWebExchange serverWebExchange) {
return userService.loginWebApp(credentials, serverWebExchange)
.map(user -> ResponseEntity.status(HttpStatus.OK).body(user))
.defaultIfEmpty(ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid username or password"));
}
我将执行以下操作:
>
abstract class Response {
}
为每种响应(如UserResponse、ErrorResponse、NotFoundResponse等)创建单独的类,并从基本的响应类扩展它们
class UserResponse extends Response {
private String login;
private String password;
public UserResponse(String login, String password) {
this.login = login;
this.password = password;
}
@JsonGetter("login")
public String getLogin() {
return login;
}
@JsonSetter("login")
public void setLogin(String login) {
this.login = login;
}
@JsonGetter("password")
public String getPassword() {
return password;
}
@JsonSetter("password")
public void setPassword(String password) {
this.password = password;
}
}
class ErrorResponse extends Response {
private String errorMessage;
public ErrorResponse(String errorMessage) {
this.errorMessage = errorMessage;
}
@JsonGetter("error_message")
public String getErrorMessage() {
return errorMessage;
}
@JsonSetter("error_message")
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
}
显式设置返回值的类型Mono
@GetMapping("/test/{login}")
public Mono<ResponseEntity<Response>> test(@PathVariable(value = "login") String login) {
return loginWebApp(login)
.map(userResponse -> ResponseEntity.status(HttpStatus.OK).body(userResponse))
.defaultIfEmpty(ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(new ErrorResponse("bad login")));
}
现在让我们尝试一下错误的登录:
良好的登录:
完整代码可在此处找到
您可以使用强制转换操作符来向下转换泛型,我相信WebFlux仍然能够封送用户和字符串:
@PostMapping("api/user/login/webApp")
public Mono<ResponseEntity> login(@RequestBody Credentials credentials, ServerWebExchange serverWebExchange) {
return userService.loginWebApp(credentials, serverWebExchange)
.map(user -> ResponseEntity.status(HttpStatus.OK).body(user))
.cast(ResponseEntity.class)
.defaultIfEmpty(ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid username or password"));
}
当我从RestController返回POJO时,它在JSON对象中转换。但是当我尝试返回controller返回纯文本。怎么了? 我的RestController:
我想回复ResponseEntity的回复。我对在ResponseEntity中提到返回类型的最佳实践有点困惑。 这是我的控制器: 我的主要责任: 这里我的返回类型是GenericResponse、AdminAccount。在ResponseEntity中提及所有退货类型是否是一种良好的做法? 哪个是最好的方法
问题内容: 我正在尝试学习nodejs,我认为做到这一点的最佳方法是尝试做一些事情而不使用express或任何其他非核心模块。我一直试图让一些文本和图像同时传递。我正在尝试的代码是: 因此,理想的情况是: 但是,什么也没出现。 我写完“ hi there”之后尝试放置一个response.end(),以显示文本,之后我尝试交换文本和图片(包括标题)的位置,以显示图片,但是我不知道了解如何使两者同时
使用Guzzle,我正在使用JSON格式的一些外部API,通常我获取数据 $data = $request- 但是我无法从这个不同的api中获取数据。数据似乎没有出现在“响应体”中。 这个api调用有效:https://i.ibb.co/80Yk6dx/Screenshot-2.png 这不起作用:https://i.ibb.co/C239ghy/Screenshot-3.png
我看到了几个类似的问题,但没有一个对我有效的答案。我正致力于将一个现有的项目转换为使用Hibernate。我正在使用Mysql作为数据库。我有一节课是这样的: 像这样的类: 当我从数据库中获取项时,我将其转换为JSON,最后得到如下格式的结果: 我找到了这个消除错误的答案,但是JSON对象与我添加之前完全相同。在某种程度上,转换到JSON会添加忽略的值。 我使用转换到JSON的方法如下:
我使用的是Spring版本4(Spring data),我想将Object作为JSON返回,我想知道以下代码即使不使用xmlRootElement注释用户类也能工作: 任何机构都可以解释吗?当我需要注释要返回为JSON的对象类时,响应体/响应实体是否自己完成工作?