簡體   English   中英

HTTP狀態415 –不支持的媒體類型錯誤

[英]HTTP Status 415 – Unsupported Media Type error

原始服務器拒絕為請求提供服務,因為有效載荷的格式不受目標資源上此方法的支持。

控制器代碼

@RestController
public class UserController
{
    @Autowired
    public IretrieveService retrieveService;

    @RequestMapping(value="/register", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public ModelAndView doRegister(@RequestBody UserBean userBean,BindingResult result)
    {
        ModelAndView view = new ModelAndView("index");
        System.out.println("username "+userBean.getUsername());
        if(!result.hasFieldErrors())
        {
            if(retrieveService.insert(userBean) != null)
            {
                System.out.println("done");
            }

        }   
        return view;

    }
}

Angular js代碼

<script type="text/javascript">
var app = angular.module('myApp', []);
app.controller("UserController", ['$scope', '$http', function($scope, $http, httpPostService) {
 var self=this;
 self.userBean={username:''};
$scope.insertData = function()
{
    alert($scope.userBean.username);
     $http({
         method: "POST",
         url: "register",
         data: $scope.userBean.username
        }).then(function(response){
         console.log(response.status);
         console.log("in success");

     }, function(response){
         console.log(response.status);
         console.log("in fail");     
     });
};
}]);
</script>


<form method="post" action="register" name="myForm">
      <label for="username" class="control-label">First Name:</label>
      <input type="text" data-ng-model="userBean.username" class="form-control"  placeholder="Enter Firstname"/>
       <button type="submit" data-ng-click="insertData()" class="btn btn-primary">Submit</button>
    </form>

錯誤來了,但是沒有將值從angular js傳遞給控制器​​類

由於您的控制器需要application / json,所以您收到415 http錯誤,但是您正在發送原始字符串數據。

這是一個如何發布json數據的工作示例:

使用Javascript:

var data = { "name":"emre" }
$.ajax({
    type: "POST",
    url: "http://localhost:8080/yourUrl",
    data: JSON.stringify(data),
    contentType: "application/json",
    cache: false,
    timeout: 600000,
    success: function (data) {
        alert("success")
    },
    error: function (e) {
        alert("ERROR : ", e);
    }
});

控制器:

@CrossOrigin
@PostMapping
public ResponseEntity post(@RequestBody UserBean request) {
    return ResponseEntity.status(HttpStatus.CREATED).body(request); // your response

}

UserBean類:

@Data // comes from lombok for getter setter purpose
class UserBean {
    private String name;
}

您可以根據需要調整控制器和JavaScript。

在我看來,您發送到控制器的數據是String而不是UserBean對象。 您的有效載荷為$scope.userBean.username但您的控制器希望使用@RequestBody UserBean userBean

將控制器更改為

    public ModelAndView doRegister(@RequestBody String userName, BindingResult result)

可能會解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM