Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 不支持的媒体类型415@RequestBody不工作,但@RequestParam正在工作_Spring Mvc - Fatal编程技术网

Spring mvc 不支持的媒体类型415@RequestBody不工作,但@RequestParam正在工作

Spring mvc 不支持的媒体类型415@RequestBody不工作,但@RequestParam正在工作,spring-mvc,Spring Mvc,我有一个模型类和一个控制器。我在PostMan的正文中发布json类型的数据。但每次我都会收到不支持的媒体类型415错误。 这是我的模型课: public class Model1 { private String name; private String password; public Model1() { System.out.println("In the Model"); } public String getName() {

我有一个模型类和一个控制器。我在PostMan的正文中发布json类型的数据。但每次我都会收到不支持的媒体类型415错误。 这是我的模型课:

public class Model1 {
    private String name;
    private String password;
    public Model1() {
        System.out.println("In the Model");
    }
    public String getName() {
        return name;
    } 

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

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

    @Override
    public String toString() {
        return "Model1 [name=" + name + ", password=" + password + "]";
    }
}
我的控制器是:

@Controller
@ResponseBody
public class EcomController { 
    @RequestMapping(value="/getLogin", method=RequestMethod.POST, 
    consumes=MediaType.APPLICATION_JSON_VALUE)
    public String getLoginStatus(@RequestBody Model1 name){
        return "successfully called Post"+name.toString();
    }
}
我使用了HttpServletRequest来代替@RequestBody,它起了作用。但是当我使用@RequestBody时,为什么它不工作呢

这是邮递员的快照。


有两个方面可以检查此类问题

  • 在请求中添加
    Content-type
    作为
    application/json
    (您可以 (已完成)
  • 确保您有
    jackson
    (核心和数据绑定) 类路径中的库
  • 第二点是确保应用程序能够在JSON和Java类型之间转换

    要进一步缩小问题范围,请检查日志并尝试获取API,查看Java对象是否转换为JSON字符串


    请参阅完整的工作代码。

    我在配置文件中发现了错误。 添加
    解决了这个问题

    说明:
    我的程序运行良好,但问题是如何将字符串(Json)映射到java对象。因此,默认映射类中存在一些问题。虽然jackson出现在课堂路径中,但它不起作用。


    此标记将注册向@Controllers发送请求所需的HandlerMapping和HandlerAdapter。此外,它还根据类路径中存在的内容应用一些默认值。例如:如果Jackson在类路径上,则支持读写JSON。

    您不需要将@ResponseBody放在那里

    还有一个例子是

    @RestController 
    public class EcomController { 
        @PostMapping("/getLogin")
        public String getLoginStatus(@RequestBody Model1 name){
            return "successfully called Post"+name.toString();
        } 
    }
    

    如果不断出现错误,我认为问题在于servlet没有发现您的控制器已注册。。当你试图编译时,你能提供更多的详细信息,比如日志吗?

    你是否在请求中用值
    MediaType.APPLICATION\u JSON\u value
    传递
    Content-Type
    头?你是如何调用端点的?我是从PostMan调用这个post-API的。我使用了值为JSON的内容类型头。这是Json:{“name”:“anshsh”,“password”:“vbvfjh”}我亲自运行了您的实现,它工作正常。请求正文是否具有适当的JSON格式?请确定-内容类型标题值为“application/JSON”?GET API运行良好:
    @RequestMapping(value=“/getUser”,method=RequestMethod.GET)public String getUser(){return“some String value”}
    感谢您的支持。这个链接很有用。
    @RestController 
    public class EcomController { 
        @PostMapping("/getLogin")
        public String getLoginStatus(@RequestBody Model1 name){
            return "successfully called Post"+name.toString();
        } 
    }