Angular + Spring 415 Unsuported Media Type

时间:2016-04-13 23:40:12

标签: java angularjs json spring rest

我发现了10或20个类似问题,我尝试了许多答案,但似乎没有一个对我有用..

这是角度服务代码:

app.factory('service',['$http','$q', function($http,$q){
return {
    get: function(m){
        return $http.post('path/getJSON',m).then(
                function(r){
                    console.log(r.data);
                    return r.data;
                }
        );
    },

    getY: function(m){
        return $http({
                method : 'POST',
                url : 'path/getJSON',
                headers: {'Content-Type': 'application/json'},
                data : JSON.stringify(m)

        }).then(
                function(r){
                    console.log(r.data);
                    return r.data;
                }
        );
    },

    getZ: function(m){
        return $http.post('path/getJSON',JSON.stringify(m)).then(
                function(r){
                    console.log(r.data);
                    return r.data;
                }
        );
    }

};
}]);

我试图在我的控制器中调用这三种方法中的任何一种,但结果是相同的:415。我也尝试过使用和不使用JSON.stringify()函数的任何一种

数据(m)构建如下:

m = {param : value, param2 : value2 etc}

以下是Java中应该处理此POST的控制器方法:

@RequestMapping(value="/getJSON", consumes = {"application/json;charset=UTF-8"},
        method=RequestMethod.POST)
@ResponseStatus(value=HttpStatus.OK)
public ResponseEntity<List<SmtElse>>getFlights(@RequestBody CustomJSONObj jsonObj){
    HttpHeaders h= new HttpHeaders();
    h.add("Access-Control-Allow-Origin", "*");
    List<SmtElse> list= new ArrayList<SmtElse>();

    System.out.println(jsonObj);
    return new ResponseEntity<List<SmtElse>>(list,h, HttpStatus.OK);
}

CustomJSONObj只有String属性,getter,setter和constructors。我还尝试在@RequestMapping或其他形式中添加一些属性。

抱歉可能重复。我知道有很大的机会,但我找不到任何问题的答案。

 <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.4.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.4</version>
</dependency>

1 个答案:

答案 0 :(得分:0)

您需要使用@RestController或@Controller和@ResponseBody注释该类。

请参阅JavaDocDifference between spring @Controller and @RestController annotation