簡體   English   中英

Spring MVC中不支持的媒體類型

[英]Unsupported Media Type in Spring MVC

我有簡單的登錄控制器。 有了它,我有了一個稱為signIn()的動作方法。 我正在提交憑據以通過ajax調用登錄該網站。

這是我的ajax調用者函數-

var AJAXCaller = function () {
};

AJAXCaller.prototype.call = function (type, uri, header, contentType, content, success, error) {
    var config = new SSKSConfig();
    var url = config.getLocation() + uri;
    return jQuery.ajax({
        'type': type,
        'url': url,
        'headers': header,
        'data': JSON.stringify(content),
        'success': success,
        'error': error
    });
};
var caller= new AJAXCaller();
caller.call('POST', '/login', { 'Content-Type': 'application/json' }, 'application/x-www-form-urlencoded', person, fnSuccess, fnError);

“人”數據在哪里-

{"emailId":"aaa@gmail.com","password":"12345"}

登錄控制器的signIn()方法代碼是-

@PostMapping(value = "/login",consumes = MediaType.APPLICATION_JSON_VALUE)
    public String signIn(@RequestBody Person person) {
        if(person.getEmailId().equals("aaa@gmail.com") && person.getPassword().equals("12345")){
            return "Success";
        }
        else{
            return "Invalid";
        }
    }

我創建了簡單的Person POJO類-

public class Person implements PersonSupport, AddressSupport {
    private String code;
    private String name;
    private String emailId;
    private String password;
    private String contactNo;
    private final Address address = new Address();

    public Person() {
    }

    @Override
    public void setCode(String code) {
        this.code = code;
    }

    @Override
    public String getCode() {
        return this.code;
    }

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

    @Override
    public String getName() {
        return name;
    }

    @Override
    public void setContactNo(String contactNo) {
        this.contactNo = contactNo;
    }

    @Override
    public String getContactNo() {
        return contactNo;
    }

    @Override
    public void setEmailId(String emailId) {
        this.emailId = emailId;
    }

    @Override
    public String getPassword() {
        return this.password;
    }

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

    @Override
    public String getEmailId() {
        return emailId;
    }

    @Override
    public String getRoadNo() {
        return address.getRoadNo();
    }

    @Override
    public String getRoadName() {
        return address.getRoadName();
    }

    @Override
    public String getCity() {
        return address.getCity();
    }

    @Override
    public String getPinCode() {
        return address.getPinCode();
    }

    @Override
    public StateList getStateList() {
        return address.getStateList();
    }

    @Override
    public void setRoadNo(String roadNo) {
        address.setRoadNo(roadNo);
    }

    @Override
    public void setRoadName(String roadName) {
        address.setRoadName(roadName);
    }

    @Override
    public void setCity(String city) {
        address.setCity(city);
    }

    @Override
    public void setPinCode(String pinCode) {
        address.setPinCode(pinCode);
    }

    @Override
    public void setStateList(StateList stateList) {
        address.setStateList(stateList);
    }

}

現在,當我嘗試登錄時,它給我415 Unsupported Media Type錯誤。 您能幫我為什么會發生此錯誤嗎??? 提前致謝..

您需要在jquery ajax調用中設置dataType: "json"

采用

@PostMapping(value = "/login",consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)

由於數據將采用UTF編碼,因此您必須使用此值或僅刪除消耗部分

標頭和內容類型的混合

$.ajax({
    type: type,
    url: url,
    data: JSON.stringify(content),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
 ...
});

您傳遞contentType ='application/x-www-form-urlencoded' 您仍然可以使用contentType變量,但可以傳遞正確的值。 如果是contentType,則無需使用標頭。

從請求映射中刪除consumes = MediaType.APPLICATION_JSON_VALUE ,它應該開始工作。

謝謝。 我已經解決了這個問題。 我已經指定了<mvc:annotation-driven/> ,但是我忘了提到將使用哪個HttpMessageConverter 我需要對Jackson庫的依賴關系(jackson-databind),以便可以將HttpRequestBody轉換為Person對象,現在,我可以支持MappingJackson2HttpMessageConverter

暫無
暫無

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

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