source

Error 415 Unsupported Media Type: POST가 JSON의 경우 REST에 도달하지 않지만 XML의 경우 REST에 도달합니다.

ittop 2023. 4. 2. 11:52
반응형

Error 415 Unsupported Media Type: POST가 JSON의 경우 REST에 도달하지 않지만 XML의 경우 REST에 도달합니다.

사실 REST WS는 처음인데 정말 이해가 안 돼요.415 Unsupported Media Type.

파이어폭스 및 그 포스터로 REST를 테스트하고 있습니다.GET나에게도 효과가 있다.POST(그것은,application/xml하지만 시도해보니application/jsonWS에 전혀 도달하지 않고 서버가 거부합니다.

제 URL 입니다.http:// localhost:8081/RestDemo/services/customers/add

이것은JSON송신:{"name": "test1", "address" :"test2"}

이것은XML송신:

<customer>
    <name>test1</name>
    <address>test2</address>
</customer>

리소스 클래스입니다.

@Produces("application/xml")
@Path("customers")
@Singleton
@XmlRootElement(name = "customers")
public class CustomerResource {

    private TreeMap<Integer, Customer> customerMap = new TreeMap<Integer, Customer>();

    public  CustomerResource() {
        // hardcode a single customer into the database for demonstration
        // purposes
        Customer customer = new Customer();
        customer.setName("Harold Abernathy");
        customer.setAddress("Sheffield, UK");
        addCustomer(customer);
    }

    @GET
    @XmlElement(name = "customer")
    public List<Customer> getCustomers() {
        List<Customer> customers = new ArrayList<Customer>();
        customers.addAll(customerMap.values());
        return customers;
    }

    @GET
    @Path("/{id}")
    @Produces("application/json")
    public String getCustomer(@PathParam("id") int cId) {
        Customer customer = customerMap.get(cId); 
        return  "{\"name\": \" " + customer.getName() + " \", \"address\": \"" + customer.getAddress() + "\"}";

    }

    @POST
    @Path("/add")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public String addCustomer(Customer customer) {
         //insert 
         int id = customerMap.size();
         customer.setId(id);
         customerMap.put(id, customer);
         //get inserted
         Customer result = customerMap.get(id);

         return  "{\"id\": \" " + result.getId() + " \", \"name\": \" " + result.getName() + " \", \"address\": \"" + result.getAddress() + "\"}";
    }

}

편집 1:

고객님의 클래스입니다.

@XmlRootElement 
public class Customer implements Serializable {

    private int id;
    private String name;
    private String address;

    public Customer() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

}

더하다Content-Type: application/json그리고.Accept: application/jsonREST Client 헤더 섹션의

이 문제는 콩 고객의 시리얼화 해제에 있습니다.Daniel이 쓰고 있는 것처럼 JAXB를 사용하여 XML로 하는 방법은 알고 있지만 JSON에서는 모르는 경우가 많습니다.

다음은 Resteasy/Jackson http://www.mkyong.com/webservices/jax-rs/integrate-jackson-with-resteasy/의 예입니다.

Jersey도 마찬가지입니다.http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/

만약 이것이 다른 사람들에게 도움이 된다면, 내 일화는 이렇다.

Postman을 사용하여 테스트 데이터를 RESTEASY 서버로 전송하던 중 발생한 문제로 인해 이 스레드가 발견되었습니다.그 결과 코드가 대폭 변경된 후 Unsupported Media Type 오류는 415개뿐이었습니다.

요컨대, 저는 모든 것을 뜯어냈고, 결국 효과가 있다고 생각되는 사소한 파일 업로드 예를 실행하려고 했지만, 실행이 되지 않았습니다.그때 나는 우체부 요청에서 문제가 발생했다는 것을 깨달았다.보통은 특별한 헤더를 송신하지 않지만, 이전 테스트에서는 「Content-Type」(애플리케이션/json) 헤더를 추가했습니다.물론 '멀티파트/폼데이터'를 올리려고 했습니다.제거하면 문제가 해결됩니다.

도덕성: 세상을 망치기 전에 머리글을 체크하라.;)

이 문제가 있었는데 Jackson Feature 클래스를 등록하지 않은 것이 문제였습니다.

// Create JAX-RS application.
final Application application = new ResourceConfig()
    ...
    .register(JacksonFeature.class);

이렇게 하지 않으면 응용 프로그램은 JSON을 Java 개체로 변환하는 방법을 알 수 없습니다.

https://jersey.java.net/documentation/latest/media.html#json.jackson

저도 같은 문제가 있었습니다.

curl - v - H " Content - Type : application / json " - X PUT - d " { " name " " " " " surname " " " " " " " " surname " " " " " " gson " " " " mared " : true " : 32 " salary " : 123 , hasCar " : " : " : true .['serkan', 'volkan', 'aybars']' XXXXX/ponyo/UserModel/json'

* About to connect() to localhost port 8081 (#0)
*   Trying ::1...
* Connection refused
*   Trying 127.0.0.1...
* connected
* Connected to localhost (127.0.0.1) port 8081 (#0)
> PUT /ponyo/UserModel/json HTTP/1.1
> User-Agent: curl/7.28.1
> Host: localhost:8081
> Accept: */*
> Content-Type: application/json
> Content-Length: 121
> 
* upload completely sent off: 121 out of 121 bytes
< HTTP/1.1 415 Unsupported Media Type
< Content-Type: text/html; charset=iso-8859-1
< Date: Wed, 09 Apr 2014 13:55:43 GMT
< Content-Length: 0
< 
* Connection #0 to host localhost left intact
* Closing connection #0

다음과 같이 pom.xml에 종속성을 추가하여 해결했습니다.한번 써 보세요.

    <dependency>
        <groupId>com.owlike</groupId>
        <artifactId>genson</artifactId>
        <version>0.98</version>
    </dependency>

저도 같은 문제예요.사실, 그 요청은 저지 어노티드 방식에 도달하지 못했습니다.@Consumes(MediaType)라는 주석을 추가하여 문제를 해결했습니다.APPLICATION_FORM_URLENCODED) @Consumes("/") 주석이 작동하지 않습니다!

    @Path("/"+PropertiesHabilitation.KEY_EstNouvelleGH)
    @POST
    //@Consumes("*/*")
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public void  get__EstNouvelleGH( @Context HttpServletResponse response) {
        ...
    }

내 경우 다음과 같은 종속성이 누락되었습니다.

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-resteasy-reactive-jackson</artifactId>
</dependency>

메서드로 문자열을 반환하지 말고 고객이 직접 이의를 제기하여 JAXB가 시리얼화 해제를 처리하도록 하십시오.

Json을 사용하여 Post Call을 눌렀을 때 Error-415-unsupported-media-type이 발생하여 동일한 문제가 발생하였습니다.

@Consumes(MediaType.APPLICATION_JSON) 

Jersey 2.0+사용한 Restful Web Service와 같이 헤더를 요청합니다.

Accept:application/json
Content-Type:application/json

프로젝트에 다음과 같은 종속성을 추가하여 이 문제를 해결했습니다.

<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.25</version>
</dependency>

그러면 라이브러리에 다음 항이 추가됩니다.

  1. jersey-media-json-2.25.jar
  2. jersey-context-2.25.jar
  3. Jackson-backs-jaxb-communications-2.8.4.jar
  4. Jackson-jaxrs-json-2.8.4.jar
  5. Jackson-jaxrs-base-2.8.4.jar

나에게 그랬던 것처럼 다른 사람에게도 효과가 있기를 바랍니다.

POST/PUT 등과 함께 JSON을 사용할 경우 컨텐츠 유형을 application/json으로 변경하기만 하면 됩니다.

하여 ARC를 XML에러가 는, 의 타입을 「이러한 타입」, 「이러한 타입」으로 .application/xml. 여기서의 예

우체부에서도 같은 문제가 발생했습니다.헤더 섹션에서 Accept를 선택하고 값을 "application/json"으로 지정했습니다.그래서 Content-Type을 선택하고 값을 "application/json"으로 지정했습니다.됐다!

JAXB를 않은 는, JAXB의 을 붙일 .@XmlRootElement415 unsupported media type

우체부에서 사용하는 동안에도 비슷한 문제가 있었습니다.header 섹션 아래의 POST 요청의 경우 다음과 같이 추가합니다.

키: 값의 쌍

콘텐츠 유형: 어플리케이션/json Accept: 어플리케이션/json

효과가 있기를 바랍니다.

언급URL : https://stackoverflow.com/questions/11773846/error-415-unsupported-media-type-post-not-reaching-rest-if-json-but-it-does-if

반응형