Spring boot 如何允许http头从JSON读取字符串?

Spring boot 如何允许http头从JSON读取字符串?,spring-boot,spring-security,jwt,postman,Spring Boot,Spring Security,Jwt,Postman,我正在尝试测试rest身份验证方法,但我在Postman中遇到了一些错误。错误是关于HHTP头的,它无法从JSON读取消息,异常消息是:httpMessageNodeDataableException 以下是RestController类: @CrossOrigin(origins = "*", maxAge = 3600) @RestController @RequestMapping("/api/auth") public class AuthController { @Autow

我正在尝试测试rest身份验证方法,但我在Postman中遇到了一些错误。错误是关于HHTP头的,它无法从JSON读取消息,异常消息是:httpMessageNodeDataableException

以下是RestController类:

@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/api/auth")
public class AuthController {

    @Autowired
    AuthenticationManager authenticationManager;
    @Autowired
    EmployeRepository employeRepository;




    @Autowired
    PasswordEncoder passwordEncoder;

    @Autowired
    JwtTokenProvider tokenProvider;

    /**
     * METHODE D'AUTHENTIFICATION
     * 
     * @param loginRequest
     * @return
     */
    @PostMapping("/signin")
    @ApiImplicitParams(@ApiImplicitParam(name = "Authorization", value = "Bearer token", required = true, dataType = "String", paramType = "header"))
    public ResponseEntity<?> authenticateUser(@Valid @RequestBody LoginRequest loginRequest)  {
        Optional<Employe> ListEmployees = employeRepository.findByMail(loginRequest.getEmail());
        List<Employe> listEmpl = new ArrayList<>();
        ListEmployees.ifPresent(listEmpl::add);
        if (listEmpl.size() == 1) {
            final Employe empl = listEmpl.stream().findFirst().get();
            Boolean matches = passwordEncoder.matches(loginRequest.getPassword(),
                    listEmpl.stream().findFirst().get().getMp());
            if (matches.equals(true)) {
                if ( empl.getMail()!= null) {
                    Authentication authentication = authenticationManager.authenticate(
                    new UsernamePasswordAuthenticationToken(
                    loginRequest.getEmail(), loginRequest.getPassword()));
                    SecurityContextHolder.getContext().setAuthentication(authentication);
                    String jwt = tokenProvider.generateToken(authentication);
                    HttpHeaders headers = new HttpHeaders();
                    headers.add("Content-Type", "application/json");
                    headers.add("Authorization", new JwtAuthenticationResponse(jwt).getAccessToken());
                    return ResponseEntity.ok(new JwtAuthenticationResponse(jwt));
                } else if (empl.getMp()!= null) {
                    Authentication authentication = authenticationManager.authenticate(
                    new UsernamePasswordAuthenticationToken(
                    empl.getMail(), loginRequest.getPassword()));
                    SecurityContextHolder.getContext().setAuthentication(authentication);
                    String jwt = tokenProvider.generateToken(authentication);
                    return ResponseEntity.ok(new JwtAuthenticationResponse(jwt));
                }

            }
        }
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }}
@CrossOrigin(origins=“*”,maxAge=3600)
@RestController
@请求映射(“/api/auth”)
公共类授权控制器{
@自动连线
AuthenticationManager AuthenticationManager;
@自动连线
雇佣关系雇佣关系;
@自动连线
密码编码器;
@自动连线
JwtTokenProvider tokenProvider;
/**
*认证方法
* 
*@param loginRequest
*@返回
*/
@邮戳(“/签名”)
@apimplicitparams(@apimplicitparam(name=“Authorization”,value=“Bearer token”,required=true,dataType=“String”,paramType=“header”))
公共响应身份验证者(@Valid@RequestBody LoginRequest LoginRequest){
可选ListEmployees=EmployeeRepository.findByMail(loginRequest.getEmail());
List listEmpl=new ArrayList();
ifPresent(listEmpl::add);
if(listEmpl.size()==1){
final Employe emp=listEmpl.stream().findFirst().get();
布尔匹配=passwordEncoder.matches(loginRequest.getPassword(),
listEmpl.stream().findFirst().get().getMp());
if(匹配。等于(真)){
if(emp.getMail()!=null){
Authentication=authenticationManager.authenticate(
新用户名PasswordAuthenticationToken(
loginRequest.getEmail(),loginRequest.getPassword());
SecurityContextHolder.getContext().setAuthentication(身份验证);
字符串jwt=tokenProvider.generateToken(身份验证);
HttpHeaders=新的HttpHeaders();
添加(“内容类型”、“应用程序/json”);
添加(“授权”,新的JwtAuthenticationResponse(jwt).getAccessToken());
返回ResponseEntity.ok(新的JwtAuthenticationResponse(jwt));
}else if(emp.getMp()!=null){
Authentication=authenticationManager.authenticate(
新用户名PasswordAuthenticationToken(
emp.getMail(),loginRequest.getPassword();
SecurityContextHolder.getContext().setAuthentication(身份验证);
字符串jwt=tokenProvider.generateToken(身份验证);
返回ResponseEntity.ok(新的JwtAuthenticationResponse(jwt));
}
}
}
返回新的ResponseEntity(未找到HttpStatus.NOT_);
}}
邮递员URI:

我得到的信息是:

{
        "timestamp": 1548681879270,
        "status": 400,
        "error": "Bad Request",
        "exception": "org.springframework.http.converter.HttpMessageNotReadableException",
        "message": "Required request body is missing: public org.springframework.http.ResponseEntity<?> com.Cynapsys.Pointage.Controller.AuthController.authenticateUser(com.Cynapsys.Pointage.Model.LoginRequest)",
        "path": "/api/auth/signin" 
}
{
“时间戳”:1548681879270,
“状态”:400,
“错误”:“错误请求”,
“异常”:“org.springframework.http.converter.httpMessageEndableException”,
“消息”:“缺少必需的请求正文:public org.springframework.http.ResponseEntity com.Cynapsys.Pointage.Controller.AuthController.authenticateUser(com.Cynapsys.Pointage.Model.LoginRequest)”,
“路径”:“/api/auth/signin”
}

您的问题缺少主要数据,这是您的
/signin
POST通话请求主体

但您的错误消息给出了解决问题所需的提示

“消息”:“缺少必需的请求正文:public” org.springframework.http.ResponseEntity com.Cynapsys.Pointage.Controller.AuthController.authenticateUser(com.Cynapsys.Pointage.Model.LoginRequest)”

您的呼叫中缺少必需的
LoginRequest