Http Post 请求,内容类型应用程序/x-www-form-urlencoded 在春季不起作用

2022-09-01 12:27:01

我是春天的新手,目前我试图做HTTP POST请求应用程序/ x-www-form-url编码,但当我把它留在我的标题中时,春天不识别它并说415 Unsupported Media Typex-www-form-urlencoded

org.springframework.web.HttpMediaTypeNotSupportedException: 不支持内容类型 'application/x-www-form-urlencoded'

任何人都可以知道如何解决它吗?请评论我。

我的控制器的一个例子是:

@RequestMapping(
    value = "/patientdetails",
    method = RequestMethod.POST,
    headers="Accept=application/x-www-form-urlencoded")
public @ResponseBody List<PatientProfileDto> getPatientDetails(
        @RequestBody PatientProfileDto name
) { 
    List<PatientProfileDto> list = new ArrayList<PatientProfileDto>();
    list = service.getPatient(name);
    return list;
}

答案 1

问题是,当我们使用 application/x-www-form-urlencoded 时,Spring 并不认为它是 RequestBody。因此,如果我们想使用它,我们必须删除@RequestBody注释。

然后尝试以下操作:

@RequestMapping(value = "/patientdetails", method = RequestMethod.POST,consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public @ResponseBody List<PatientProfileDto> getPatientDetails(
        PatientProfileDto name) {


    List<PatientProfileDto> list = new ArrayList<PatientProfileDto>();
    list = service.getPatient(name);
    return list;
}

请注意,删除了批注@RequestBody


答案 2

您应该将@RequestBody替换为@RequestParam,并且不接受带有java实体的参数。

那么你的控制器可能是这样的:

@RequestMapping(value = "/patientdetails", method = RequestMethod.POST, 
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public @ResponseBody List<PatientProfileDto> getPatientDetails(
    @RequestParam Map<String, String> name) {
   List<PatientProfileDto> list = new ArrayList<PatientProfileDto>();
   ...
   PatientProfileDto patientProfileDto = mapToPatientProfileDto(mame);
   ...
   list = service.getPatient(patientProfileDto);
   return list;
}

推荐