任务很简单,客户机使用application/x-www-form-urlencoded媒体类型的POST发送请求。服务器接收并响应状态为OK。但是看起来媒体类型application/x-www-form-urlencoded和application/x-www-form-urlencoded之间有区别;charset=UTF-8
服务器部分:
@Slf4j
@Controller
@RequestMapping(produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public class CallbackController {
@RequestMapping(value = "/callback/", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public ResponseEntity<?> callback(HttpServletRequest servletRequest, @RequestBody RequestEntity<?> body) throws IOException {
log.info("Hello: {}", servletRequest);
log.info("Hello: {}", body);
String s = extractPostRequestBody(servletRequest);
log.info("Hello: {}", s);
return new ResponseEntity<Object>(HttpStatus.OK);
}
}
客户部分:
public void sendcallback() throws IOException {
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8082/callback/";
MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
headers.add(HttpHeaders.ACCEPT_CHARSET, "UTF-8");
headers.add(HttpHeaders.ACCEPT, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
headers.add(HttpHeaders.USER_AGENT, "uuuuuuuuuuser");
headers.add(HttpHeaders.AUTHORIZATION, "none");
MultiValueMap<String, String> body = new LinkedMultiValueMap<String, String>();
List<String> val1 = new ArrayList<>();
val1.add("valllll");
body.put("val", val1);
HttpEntity<?> entity= new HttpEntity<>(body, headers);
ResponseEntity<?> result = restTemplate.exchange(url, HttpMethod.POST, entity, Object.class);
log.info("response: {}", result);
}
客户端的结果输出请求:
"POST /callback/ HTTP/1.1[\r][\n]"
"Content-Type: application/x-www-form-urlencoded[\r][\n]"
"Accept-Charset: UTF-8[\r][\n]"
"Accept: application/x-www-form-urlencoded[\r][\n]"
"User-Agent: uuuuuuuuuuser[\r][\n]"
"Authorization: none[\r][\n]"
"Content-Length: 11[\r][\n]"
"Host: localhost:8082[\r][\n]"
"Connection: Keep-Alive[\r][\n]"
"Accept-Encoding: gzip,deflate[\r][\n]"
"[\r][\n]"
"val=valllll"
回应:
"HTTP/1.1 405 Method Not Allowed[\r][\n]"
"Server: Apache-Coyote/1.1[\r][\n]"
"Allow: GET, HEAD[\r][\n]"
"Content-Language: ru-RU[\r][\n]"
"Content-Length: 0[\r][\n]"
"Date: Tue, 11 Aug 2015 06:28:41 GMT[\r][\n]
"[\r][\n]"
和调试模式下的服务器告诉我一件有趣的事情:
看来我必须手动添加FormHttpMessageConverter
@SpringBootApplication
public class CallbackApplication extends WebMvcConfigurerAdapter {
public static void main(String[] args) {
SpringApplication.run(CallbackApplication.class);
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FormHttpMessageConverter converter = new FormHttpMessageConverter();
MediaType mediaType = new MediaType("application","x-www-form-urlencoded", Charset.forName("UTF-8"));
converter.setSupportedMediaTypes(Arrays.asList(mediaType));
converters.add(converter);
super.configureMessageConverters(converters);
}
}
不要忘记使用正确的@RequestBody类型
public@responsebody responseentity<?>回调(HttpServletRequest servletRequest,@requestbody MultiValueMap body)
{
因为有:
@PostMapping public UserResponse createUser(@RequestBody UserRequest userDetail){ 这是我收到的错误代码 } 我尝试了很多不同的方法仍然没有得到解决方案这是来自邮递员的图片来自邮递员的图片
问题内容: 我写了下面的@Controller方法 请求失败并出现以下错误 [PS:泽西岛要友好得多,但鉴于此处的实际限制,现在无法使用它] 问题答案: 问题在于,当我们使用application / x-www-form-urlencoded时,Spring不会将其理解为RequestBody。因此,如果要使用它,则必须删除@RequestBody批注。 然后尝试以下操作:
问题内容: 基于Spring @Controller对x-www-form-urlencoded的问的答案 我写了下面的@Controller方法 失败的请求因以下错误 [PS:Jersey要友好得多,但鉴于这里的实际限制,现在无法使用它] 问题答案: 问题在于,当我们使用 application / x-www-form-urlencoded时 ,Spring不会将其理解为RequestBody
当内容类型为application/x-www-form-urlencoded;charset=UTF-8并且请求正文为text或application/json时,如何在控制器中进行post映射。我读到@RequestBody不能与UrlenCoded一起工作。如何重新发行这个问题。
当内容类型不是text/html、text/plain或text/xml,而是application/x-www-form-urlencoded内容类型时,我很难理解如何设置字符集。 给出以下(简化的)javascript代码: 如果我没有显式设置编码, Firebug告诉我内容类型是"Application/x-www-form-urlencoded; charset=UTF-8"。 例如,如果
在本规范公布的时候,“application/x-www-form-urlencoded”媒体类型在[W3C.REC-html401-19991224]的17.13.4节中定义但未在IANA MIME媒体类型注册表([http://www.iana.org/assignments/media-types](http://www.iana.org/assignments/media-types))中