HTTP 状态 415 - 请求实体的格式不受支持

2022-09-02 05:30:09

我正在开发java restful Web服务。我让它为GET请求工作,但POST请求不起作用。我的控制器类是 。到目前为止,我已经做了这些:RestController

@RequestMapping(value = "/api/signup", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public long signUp(@ModelAttribute ApiMemberModel apiMember) {
    memberService = new MemberDetailsService();
    Member m = memberService.createMember(apiMember.getUsername(), apiMember.getPassword(), apiMember.getEmail(), "");
    return m.getId();
}

还尝试了 RequestBody 而不是 ModelAttribute。

我使用Postman扩展来发送POST请求。例如:

{
    "username": "asd",
    "password": "sfsdg",
    "email": "sdfdsf@fdsfkg.com"
}

但是我得到错误:

description The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.

我做错了什么?模型类为:

 public class ApiMemberModel {
    private String username;
    private String password;
    private String email;

    public ApiMemberModel(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

答案 1

我敢打赌,邮递员的电话不包括.Content-Type: application/json

HTTP 415 表示服务器不理解请求的媒体格式。在您的控制器中,您指定它接受JSON,但您没有说明请求是否指示正文采用该格式。仅仅因为您将数据放在JSON格式中,并不意味着服务器将识别它,您必须在标头中指示它。Content-Type


答案 2

Spring提供了许多开箱即用的默认HttpMessageConverters,这些转换器将用于转换,具体取决于项目类路径中是否存在某些库。

例如,如果 Content-Type in request Header 是 application/json 或 application/xml 之一,这意味着 POST 正文包含 json 或 XML[流行格式],并且如果在你的类路径中找到 Jackson 库,Spring 会将转换委托给 MappingJackson2HttpMessageConverter [for json] 或 MappingJackson2XmlHttpMessageConverter [for xml]。

要声明对 Jackson 库 (jackson-databind) 的依赖关系,请在 pom 中包含以下依赖项.xml

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
</dependency>