복붙노트

[SPRING] 스프링 MVC 415 지원되지 않는 미디어 유형

SPRING

스프링 MVC 415 지원되지 않는 미디어 유형

Spring 3.2를 사용하고 json 객체의 배열을 제출하기 위해 ajax post 요청을 사용하려고합니다. 관련이 있다면 모든 특수 문자를 이스케이프 처리했습니다.

나는 415의 HTTP Status를 얻고있다.

내 컨트롤러 :

@RequestMapping(value = "/save-profile", method = RequestMethod.POST,consumes="application/json")
    public @ResponseBody String saveProfileJson(@RequestBody String[] profileCheckedValues){
        System.out.println(profileCheckedValues.length);
        return "success";
    }

jquery는 다음과 같습니다.

jQuery("#save").click(function () {
        var profileCheckedValues = [];
        jQuery.each(jQuery(".jsonCheck:checked"), function () {
            profileCheckedValues.push($(this).val());
        });
        if (profileCheckedValues.length != 0) {
            jQuery("body").addClass("loading");
            jQuery.ajax({
                type: "POST",
                contentType: "application/json",
                url: contextPath + "/sample/save-profile",
                data: "profileCheckedValues="+escape(profileCheckedValues),
                dataType: 'json',
                timeout: 600000,
                success: function (data) {
                    jQuery('body').removeClass("loading");
                },
                error: function (e) {
                    console.log("ERROR: ", e);
                    jQuery('body').removeClass("loading");
                }
            });
        }
    });

게시 할 배열의 객체 중 하나의 예는 다음 json입니다.

{
  "id": "534213341",
  "name": "Jack Lindamood",
  "first_name": "Jack",
  "last_name": "Lindamood",
  "link": "https://www.facebook.com/jack",
  "username": "jack",
  "gender": "male",
  "locale": "en_US",
  "updated_time": "2013-07-23T21:13:23+0000"
}

오류 :

The server refused this request because the request entity is in a format not supported by the requested resource for the requested method

이 오류가 발생하는 이유는 누구입니까?

해결법

  1. ==============================

    1.HttpServletRequest로 시도 할 수 있습니다. 아무런 문제가 없다.

    HttpServletRequest로 시도 할 수 있습니다. 아무런 문제가 없다.

      @RequestMapping(value = "/save-profile", method = RequestMethod.POST,consumes="application/json",headers = "content-type=application/x-www-form-urlencoded")
        public @ResponseBody String saveProfileJson(HttpServletRequest request){
           System.out.println(request.getParameter("profileCheckedValues"));
            return "success";
        }
    
  2. ==============================

    2.1) 다음 종속성을 추가하십시오

    1) 다음 종속성을 추가하십시오

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson-version}</version> // 2.4.3
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson-version}</version> // 2.4.3
    </dependency>
    

    2) 컨트롤러 메소드에서 @RequestBody 어노테이션을 사용하는 경우 xml 파일에 다음을 추가했는지 확인하십시오

    <mvc:annotation-driven />
    

    이렇게하면 415 상태 코드 문제가 해결됩니다.

  3. ==============================

    3.jackson과 jackson-databind를 classpath에 추가해야합니다. Spring은 MappingJacksonHttpMessageConverter를 사용하여 픽업 할 것입니다.

    jackson과 jackson-databind를 classpath에 추가해야합니다. Spring은 MappingJacksonHttpMessageConverter를 사용하여 픽업 할 것입니다.

  4. ==============================

    4.json 입력을 요구하는 요청 매핑 구성에서 "application / json"을 사용했습니다. JSON 입력이 아닌 요청을 보내면 Spring은 415 Unsupported Media Type에 대해 불평했다. 그래서 consume = "application / json"제거는 저에게 효과적이었습니다. 따라서 Spring 컨트롤러 메쏘드 시그니처에서 요청 입력과 받아들이는 미디어 타입을 살펴보십시오. 일치하지 않으면 415 오류가 발생합니다. 이것이 가장 큰 이유 일 것입니다.

    json 입력을 요구하는 요청 매핑 구성에서 "application / json"을 사용했습니다. JSON 입력이 아닌 요청을 보내면 Spring은 415 Unsupported Media Type에 대해 불평했다. 그래서 consume = "application / json"제거는 저에게 효과적이었습니다. 따라서 Spring 컨트롤러 메쏘드 시그니처에서 요청 입력과 받아들이는 미디어 타입을 살펴보십시오. 일치하지 않으면 415 오류가 발생합니다. 이것이 가장 큰 이유 일 것입니다.

  5. ==============================

    5.데이터 유형에 대해 json을 application / json으로 변경해보십시오. 존슨이 어떻게 생겼 는데요? 나는 json이 String으로 변환 된 것을 본 적이 없다. 그래서 이것은 또한 문제가 될 수있다.

    데이터 유형에 대해 json을 application / json으로 변경해보십시오. 존슨이 어떻게 생겼 는데요? 나는 json이 String으로 변환 된 것을 본 적이 없다. 그래서 이것은 또한 문제가 될 수있다.

  6. ==============================

    6.나는 똑같은 문제가 있었다. 이 문제를 해결하려면 다음 단계를 따라야했습니다.

    나는 똑같은 문제가 있었다. 이 문제를 해결하려면 다음 단계를 따라야했습니다.

    1. 다음과 같은 종속성이 있는지 확인하십시오.

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson-version}</version> // 2.4.3
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson-version}</version> // 2.4.3
        </dependency>
    

    2. 다음 필터를 만듭니다.

        public class CORSFilter extends OncePerRequestFilter {
    
            @Override
            protected void doFilterInternal(HttpServletRequest request,
                                            HttpServletResponse response, FilterChain filterChain)
                    throws ServletException, IOException {
    
                String origin = request.getHeader("origin");
                origin = (origin == null || origin.equals("")) ? "null" : origin;
                response.addHeader("Access-Control-Allow-Origin", origin);
                response.addHeader("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, DELETE, OPTIONS");
                response.addHeader("Access-Control-Allow-Credentials", "true");
                response.addHeader("Access-Control-Allow-Headers",
                        "Authorization, origin, content-type, accept, x-requested-with");
    
                filterChain.doFilter(request, response);
            }
        }
    

    3. web.xml에서 요청에 대해 위의 필터를 적용합니다.

        <filter>
            <filter-name>corsFilter</filter-name>
            <filter-class>com.your.package.CORSFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>corsFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

    나는 이것이 누군가에게 유용하기를 희망한다.

  7. ==============================

    7.나는 같은 문제를 겪었다. spring-servlet.xml에 아래 코드 줄을 가져 왔는데,이 XML 파일의 거의 끝 부분에 있었다. 그것은 효과가 있었다.     

    나는 같은 문제를 겪었다. spring-servlet.xml에 아래 코드 줄을 가져 왔는데,이 XML 파일의 거의 끝 부분에 있었다. 그것은 효과가 있었다.     

  8. from https://stackoverflow.com/questions/18102452/spring-mvc-415-unsupported-media-type by cc-by-sa and MIT license