有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java HTTP状态415–在Spring MVC上执行POST请求时不支持的媒体类型

我试图在一个简单的Spring MVC web应用程序上发送一个post请求,并在我的控制器中使用RequestBody将JSON转换为Java对象,但无论出于什么原因,我一直得到HTTP Status 415 – Unsupported Media Type。我花了很多时间试图找到一个解决方案,但似乎没有任何效果

控制器中的get方法似乎工作正常。这是我的原始代码

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping(value = "/users", method = RequestMethod.POST)
public class MyControllerAgain {

    @RequestMapping(method = RequestMethod.POST, consumes = "application/json")
    public void handleJson(@RequestBody Contact c) {
        System.out.println(c);
    }

    @RequestMapping(method = RequestMethod.GET, consumes = "application/json")
    public void handleGet() {
        System.out.println("a");
    }
}

这是我的Contact

public class Contact {

    int id;

    public String name;

    public int number;

    public Contact(){}

    // Getters and setters
}

我向邮递员发送了一个请求,看起来就是这样

POST /users HTTP/1.1
Host: localhost:8080
Content-Type: application/json
Accept: application/json
Cache-Control: no-cache
Postman-Token: 511c9e03-4178-380d-58f8-db24a3245b9e

{
    "id":1,
    "name":"something",
    "number":1
}

我还尝试在我的^{中包含杰克逊依赖项。 我尝试过修改@RequestMapping注释中的consume值,并尝试过我请求中的所有头部accept和内容类型组合

此外,如果我使用@ModelAttribute而不是@RequestBody,那么除了Contact类中的所有字段都为空之外,其他一切都可以正常工作

这里是github链接https://github.com/Sanil2108/test_springmvc


共 (3) 个答案

  1. # 1 楼答案

    什么都试过了,但都没成功。也许我在某个地方犯了一个愚蠢的错误,或者我的配置有严重问题。不管怎样,我试着让它与弹簧靴一起工作,它工作得很好。对于任何感兴趣的人,这里是github链接https://github.com/Sanil2108/spring_hibernate/tree/master/spring_boot1

    同时,感谢所有试图帮助我们的人

  2. # 2 楼答案

    在我看来,jpa的提名似乎把json的反序列化搞砸了

    从spring服务器返回的错误可能具有误导性。 尝试将普通对象与setter和getter一起使用,看看这是否会改变什么。 你应该在日志中搜索一些异常

  3. # 3 楼答案

    handleGet方法添加映射,例如:

    @RequestMapping(value = "/get", method = RequestMethod.GET, consumes = "application/json")
    public void handleGet() {
        System.out.println("a");
    }
    

    --更新--

    从GET call中删除consumes = "application/json"部分。它发现,监听“/users”的两个请求都可以使用json数据,但一个是GET,另一个是POST

    --第二次更新-- 这肯定会奏效的。测试

    @RestController
    @RequestMapping(value = "/users", method = RequestMethod.POST)
    public class ContactController
    {
        @RequestMapping(method = RequestMethod.POST, consumes = "application/json")
            public void handleJson(@RequestBody Contact c) 
            {
               System.out.println(c);
            }
    }