java - 415(不支持的媒体类型)与 jquery

标签 java jquery json spring spring-mvc

我刚开始使用 RESTful API,我不知道为什么会显示此错误。 我通过 jQuery 发布这些值。我还需要做其他事情吗?这是我的 jQuery 代码:

更新:现在显示405(方法不允许)

 $(document).ready(function(){ 


$("#patsubmit").click(function() {
    var firstName = $("#firstName").val();
    var lastName = $("#lastName").val();
    var mobileNumber = $("#mobileNumber").val();
    var emailId = $("#emailId").val();

   var dataString = '{"firstName":"'+ firstName + '","lastName":"' + lastName + '","mobileNumber":"' + mobileNumber + '", "emailId":"' + emailId+'"}';
   console.log(dataString); 
   if(firstName=='' )
    {
alert("nothing in it");
    }
    else
    {
    $.ajax({
    type: 'POST',
     url : '/geniedoc/api/patient/register',
     data: dataString,
     contentType: 'application/json',
     dataType: 'json',
     headers: {'Content-Type':'application/json'}
    success: function(){ // Uncaught SyntaxError: Unexpected identifier
console.log();
   }
});}
    return false;
    });

});

这是我的 Java API。 MAIN_PATIENT = api/patentRestURIConstants.REGISTER = 注册

@RestController
@RequestMapping(value = RestURIConstants.MAIN_PATIENT)
public class PatientRestController extends AbstractController implements RestURIConstants, GenieDocConstants{

    private static final Logger logger = Logger.getLogger(UserRestController.class);

    @RequestMapping(value = RestURIConstants.REGISTER, method = RequestMethod.POST, consumes ="application/json")
    public @ResponseBody ModelMap registerPatient(HttpServletRequest  request, @RequestBody PatientVo patientVo){
        logger.info("registerPatient : Start");
        long startTime = System.currentTimeMillis();
        ModelMap map = new ModelMap();
        PatientVo patVo;
        try {
            if(patientVo.getFirstName() == null) {
                map.addAttribute(STATUS_CODE, FAILURE);
                map.addAttribute(STATUS_MESSAGE, this.env.getProperty(MESSAGE_FIRST_NOT_EMPTY));
            } else if(patientVo.getEmailId() == null) {
                map.addAttribute(STATUS_CODE, FAILURE);
                map.addAttribute(STATUS_MESSAGE, this.env.getProperty(MESSAGE_EMAIL_NOT_EMPTY));
            } else if(patientVo.getEmailId() == "") {
                map.addAttribute(STATUS_CODE, FAILURE);
                map.addAttribute(STATUS_MESSAGE, this.env.getProperty(MESSAGE_EMAIL_NOT_EMPTY));
            } else if (patientVo.getMobileNumber() == null) {
                map.addAttribute(STATUS_CODE, FAILURE);
                map.addAttribute(STATUS_MESSAGE, this.env.getProperty(MESSAGE_MOBILE_NOT_EMPTY));
            } else {
                patVo = this.patientManagementService.provisionPatient(patientVo);
                if (patVo != null) {
                    map.addAttribute("patientId", patVo.getEmailId());
                    map.addAttribute(STATUS_CODE, SUCCESS_STATUS_CODE_REGPATIENT);
                    map.addAttribute(STATUS_MESSAGE, this.env.getProperty(SUCCESS_STATUS_CODE_REGPATIENT));

                } else {
                    map.addAttribute(STATUS_CODE, ERROR_STATUS_CODE_REG);
                    map.addAttribute(STATUS_MESSAGE, this.env.getProperty(ERROR_STATUS_CODE_REG));
                }
            }
        } catch (MongoDBDocumentNotFoundException e) {
            map.addAttribute(STATUS_CODE, ERROR_STATUS_CODE_REGPATIENT);
            map.addAttribute(STATUS_MESSAGE,this.env.getProperty(ERROR_STATUS_CODE_REGPATIENT));
            logger.error("Error : " + e.getMessage());
            //e.printStackTrace();
        } catch (UserAreadyExsistException e) {
            map.addAttribute(STATUS_CODE, ERROR_STATUS_CODE_REGPATIENT);
            map.addAttribute(STATUS_MESSAGE, this.env.getProperty(ERROR_STATUS_CODE_REGPATIENT));
            logger.error("Error : " + e.getMessage());
            //e.printStackTrace();
        }
        logger.debug("Exit: Total Time Taken: "+ (System.currentTimeMillis() - startTime));
        return map;
    }

最佳答案

您需要将Content-Type header 设置为application/json

$.ajax({
    type: 'POST',
    url: '/geniedoc/api/patient/register',
    data: dataString,
    headers: {
        'Content-Type':'application/json'
    }
   .....
}

在您定义的 Spring Controller 中,仅接受 MIME 类型 application/json 的内容。由于标准内容类型 text/plain,Spring Controller 不接受您的请求并发回状态代码 415(不支持媒体类型)

编辑:正如user6409738提到的,您需要以json格式发送数据。否则 Spring Controller 将导致解析主体时出现异常。

例如 Yagnesh Agola 发布的解决方案

var dataString = '{"firstName":"'+ firstName + '","lastName":"' + lastName + '","mobileNumber":"' + mobileNumber + '","emailId":' + emailId+'"}'; 

这取决于您的 PatientVo 类别是什么样的

关于java - 415(不支持的媒体类型)与 jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37786036/

相关文章:

java - 如何检查字符串的一部分是否为小写?

java - Drools Fusion 支持持久的、长时间运行的事件

JavaScript 未显示正确的图像

java - 使用 rdf4j 将元组转换为 json

java - 使用 Spring 任务执行器

java - 带有组合框和复选框的 SWT TreeViewer

json - 检查 JSON 响应中是否存在关键字 - Azure 逻辑应用

python - 无法访问 JSON 输出中的 key : string indices must be integers

javascript - 更新页面加载时的价格字段

javascript - 在 jQuery 中选择动态生成的元素