内容类型为application / x-www-form-urlencoded的Http Post请求无法在Spring

时间:2016-01-14 04:58:48

标签: java jquery spring rest spring-mvc

我刚刚春天刚尝试做 HTTP POST请求应用程序/ x-www-form-url encoded ,但是当我把它保存在我的标题中时,那么就不会认识它并说{{1 }} 415 Unsupported Media Type

  

org.springframework.web.HttpMediaTypeNotSupportedException:Content   输入'application / x-www-form-urlencoded'不支持

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

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

x-www-form-urlencoded

6 个答案:

答案 0 :(得分:34)

问题在于,当我们使用 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

答案 1 :(得分:4)

您应将 @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;
}

答案 2 :(得分:0)

您必须告诉Spring您的服务支持哪些输入内容类型。您可以使用&#34;消费&#34;与您的请求相对应的注释元素&#34;内容类型&#34;报头中。

@RequestMapping(value = "/", method = RequestMethod.POST, consumes = {"application/x-www-form-urlencoded"})

如果您发布了代码,那将会很有帮助。

答案 3 :(得分:0)

最简单的方法是将ajax请求的内容类型设置为&#34; application / json;字符集= UTF-8&#34;然后让你的api方法消耗json。喜欢这个

var basicInfo = JSON.stringify(
                    {
                        firstName : playerProfile.firstName(),
                        lastName : playerProfile.lastName(),
                        gender : playerProfile.gender(),
                        address : playerProfile.address(),
                        country : playerProfile.country(),
                        bio : playerProfile.bio()
                    });

 $.ajax({
                    url: "http://localhost:8080/social/profile/update",
                    type: 'POST',
                    dataType: 'json',
                    contentType: "application/json; charset=utf-8",
                    data: basicInfo,
                    success: function(data) {



                    }
                });


@RequestMapping(value = "/profile/update", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseModel> UpdateUserProfile(@RequestBody User usersNewDetails, HttpServletRequest request, HttpServletResponse response){

我猜测问题是spring boot有问题提交表单数据,这不是json通过ajax请求。 注意:ajax的默认内容类型是&#34;应用程序/ x-WWW窗体-urlencoded&#34;

答案 4 :(得分:0)

解决方案可以在这里https://github.com/spring-projects/spring-framework/issues/22734

您可以创建两个单独的发布请求映射。例如。

{{1}}

答案 5 :(得分:0)

将contentType替换为“ application / x-www-form-urlencoded”,而将dataType替换为“ text”,因为wildfly 11不支持所提及的contenttype。