【问题标题】:RestController @requestbody always recibe empty pojo in springRestController @requestbody 总是在春天 recibe empty pojo
【发布时间】:2020-01-17 15:12:00
【问题描述】:

我有一个问题,我想在帖子中写一个 POJO,但我总是写一个空的 POJO

这是我的界面:

package com.test.api;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.server.ResponseStatusException;

import com.test.beans.LoginResponse;
import com.test.core.statistics.FGService;

import io.swagger.v3.oas.annotations.parameters.RequestBody;
//
@RequestMapping({"/key", "/key/"})
public interface KeyLoginAPI {


    @PostMapping(path = "newkey",consumes = "application/json",produces = "application/json")

    public LoginResponse generateKey( @RequestBody(required = true) LoginResponse login) throws ResponseStatusException;
}

这是我的控制器应该如何返回 pojo:

package com.test.controller;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ResponseStatusException;

import com.test.api.KeyLoginAPI;
import com.test.beans.LoginResponse;
//import com.test.model.DlsLlaves;

@RestController
public class KeyLoginApiController implements KeyLoginAPI{

    @Override
    public LoginResponse generateKey(LoginResponse login) throws ResponseStatusException {

        return login;
    }

    private void authenticate(Integer providerid, String key) {


    }


}

这是我使用 lombok 作为 getter 和 setter 的 POJO:

package com.test.beans;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class LoginResponse extends DefaultResponse{
    private String token;


}

我的要求是:

POST http://localhost:8080/key/newkey HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json
Content-Length: 81
Host: localhost:8080
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

{
    "code": 1,
    "message": "message example",
    "token": "token example"
}

这是回应:

HTTP/1.1 200 
Content-Type: application/json
Transfer-Encoding: chunked
Date: Fri, 17 Jan 2020 15:02:20 GMT

{"code":null,"message":null,"token":null}

我也尝试使用没有lombok的pojo,也不起作用,我不知道该怎么做,希望有人能帮助我

【问题讨论】:

  • 为什么会有两个相同的映射{"/key", "/key/"}。另外,可以试试@PostMapping(value = "newkey"...吗?注意value 而不是path
  • 嗨@FedericoPiazza,我换了@RequestMapping("key") and @PostMapping(value = "newkey"),但都不起作用
  • 小心斜线。检查并使用这个@RequestMapping("/key")@PostMapping("/newkey")
  • 顺便说一句,在您的问题中,您说您的请求不起作用,但您的请求是……看来您的回答不是。您确定您的响应对象填充良好吗?
  • @FedericoPiazza 也尝试过,但它不起作用

标签: spring spring-boot


【解决方案1】:

由于我需要更好的格式,因此我将把它作为评论而不是答案发布。

您的代码对我来说有点尴尬,不要使用接口并使用带有注释的常规类。此外,为响应创建一个全新的对象。

改用此代码:

@RestController
@RequestMapping("/key")
public class KeyLoginApiController {

    @PostMapping("/newkey")
    public LoginResponse generateKey(@RequestBody LoginResponse login)
        LoginResponse response = new LoginResponse();
        response.setMessage("something");
        return response;
    }
}

一旦您确认您的请求正文有效,然后返回 login 继续您的测试

【讨论】:

    猜你喜欢
    • 2016-05-25
    • 2014-03-16
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    相关资源
    最近更新 更多