首页 > 解决方案 > REST Api Spring boot with mongodb如何获取json?

问题描述

@GetMapping("/getAccount")
public Account validateAccount(@RequestBody) {
}

弹簧靴非常新。我的帐户文件有 5 个以上的值,所有字符串、用户名、密码、id 和一些等等。

鉴于这种

{
    "username": "bob"
    "password": "password"
}

它应该给出 200 响应代码 OK

{
    "id": "45645646546"
    "username": "bob"
    "password": "password"
    "status": "Single"
    "filler": "filler" 
}

但是我不确定如何在我的 validateAccount 函数中读取“用户名”和“密码”json

与这个问题并不真正相关,但有人知道如何在函数中发送响应代码吗?像 .sendresponseheader(400) 这样的东西

标签: mongodbspring-boot

解决方案


public class AccountDTO {
    @JsonIgnore
    private Long id;
    @NotNull
    private String username;
    @NotNull
    private String password;
    @JsonIgnore
    private String status;
    @JsonIgnore
    private String filler;

    // getters & setters
}

您可能想要创建一个 DTO(数据事务对象),如上所示。这是它的wiki的链接。

接下来使用 @RequestBody 注释将映射用户输入传递到此 DTO。

@RestController
public class AccountController {
    @GetMapping("/accounts")
    public ResponseEntity<Account> validateAccount(@RequestBody AccountDTO accountDTO) {
        return new ResponseEntity<>(accountService.validate(accountDTO), HttpStatus.OK);
    }
}

或者你可以使用

@RestController
public class AccountController {
    @GetMapping("/accounts")
    public Response validateAccount(@RequestBody AccountDTO accountDTO) {
        return new ResponseEntity().ok(accountService.validate(accountDTO));
    }
}

用户输入将使用您正在使用的任何 JSON 处理器从 json 转换为 AccountDTO,它很可能是 com.fasterxml.jackson.core。

@JsonIgnore 和 @NotNull 注释将确保仅使用用户名和密码字段,而在接受用户输入时忽略其他字段。

您可以将此 DTO 传递给您的服务类,并在您的业务逻辑中使用 findByUsername() 之类的东西,并使用以下映射器函数或一些外部库(如 Model Mapper 或 MapStruct)返回填充的 AccountDTO。

public toAccountDTO(Account account) {
    AccountDTO accountDTO = new AccountDTO();
    accountDTO.setUsername(account.getUsername());
    // and so on...
    return accountDTO;
}

对于您的最后一个查询,将返回的 AccountDTO 对象包装在 ResponseEntity 包装器中,以便为您的有效负载提供适当的响应代码。这是 ResponseEntity Java 文档的链接。


推荐阅读