오류 415 지원되지 않는 미디어 유형 : JSON 인 경우 POST가 REST에 도달하지 않지만 XML 인 경우에는 도달합니다.
나는 실제로 REST WS를 처음 접했지만 실제로는 이것을 얻지 못했습니다 415 Unsupported Media Type
.
나는 파이어 폭스에 포스터 내 REST를 테스트입니다 그리고는 GET
또한 나를 위해 잘 작동합니다 POST
(그것의 때 application/xml
내가하려고 할 때) 그러나 application/json
이 모든에 WS 도달하지 않는 서버는 그것을 거부합니다.
이것은 내 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;
}
}
문제는 Bean Customer의 직렬화 해제에 있습니다. 여러분의 프로그램은 Daniel이 작성하는 JAXB를 사용하여 XML로 수행하는 방법을 알고 있지만 JSON으로 수행하는 방법을 모를 가능성이 높습니다.
Here you have an example with Resteasy/Jackson http://www.mkyong.com/webservices/jax-rs/integrate-jackson-with-resteasy/
The same with Jersey: http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/
Add Content-Type: application/json
and Accept: application/json
in REST Client header section
Just in case this is helpful to others, here's my anecdote:
I found this thread as a result of a problem I encountered while I was using Postman to send test data to my RESTEasy server, where- after a significant code change- I was getting nothing but 415 Unsupported Media Type errors.
Long story short, I tore everything out, eventually I tried to run the trivial file upload example I knew worked; it didn't. That's when I realized that the problem was with my Postman request. I normally don't send any special headers, but in a previous test I had added a "Content-Type": "application/json" header. OF COURSE, I was trying to upload "multipart/form-data." Removing it solved my issue.
Moral: Check your headers before you blow up your world. ;)
I had this issue and found that the problem was that I had not registered the JacksonFeature class:
// Create JAX-RS application.
final Application application = new ResourceConfig()
...
.register(JacksonFeature.class);
Without doing this your application does not know how to convert the JSON to a java object.
https://jersey.java.net/documentation/latest/media.html#json.jackson
I had the same problem:
curl -v -H "Content-Type: application/json" -X PUT -d '{"name":"json","surname":"gson","married":true,"age":32,"salary":123,"hasCar":true,"childs":["serkan","volkan","aybars"]}' XXXXXX/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
I resolved it by adding the dependency to pom.xml as follows. Please try it.
<dependency>
<groupId>com.owlike</groupId>
<artifactId>genson</artifactId>
<version>0.98</version>
</dependency>
I get the same issue. In fact, the request didn't reach the jersey annoted method. I solved the problem with add the annotation: @Consumes(MediaType.APPLICATION_FORM_URLENCODED) The annotation @Consumes("/") don't work!
@Path("/"+PropertiesHabilitation.KEY_EstNouvelleGH)
@POST
//@Consumes("*/*")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void get__EstNouvelleGH( @Context HttpServletResponse response) {
...
}
Don't return Strings in your methods but Customer objects it self and let JAXB take care of the de/serialization.
I had the same issue, as it was giving error-415-unsupported-media-type while hitting post call using json while i already had the
@Consumes(MediaType.APPLICATION_JSON)
and request headers as in my restful web service using Jersey 2.0+
Accept:application/json
Content-Type:application/json
I resolved this issue by adding following dependencies to my project
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.25</version>
</dependency>
this will add following jars to your library :
- jersey-media-json-jackson-2.25.jar
- jersey-entity-filtering-2.25.jar
- jackson-module-jaxb-annotations-2.8.4.jar
- jackson-jaxrs-json-provider-2.8.4.jar
- jackson-jaxrs-base-2.8.4.jar
I hope it will works for others too as it did for me.
just change the content-type to application/json when you use JSON with POST/PUT, etc...
In case you are trying to use ARC app from google and post a XML
and you are getting this error, then try changing the body content type to application/xml
. Example here
'program tip' 카테고리의 다른 글
"interfaceOrientation"은 iOS 8에서 더 이상 사용되지 않습니다.이 메서드를 변경하는 방법 Objective C (0) | 2020.10.26 |
---|---|
사용하지 않는 포함은 C / C ++에서 유해합니까? (0) | 2020.10.26 |
Python Flask 앱을 여러 파일로 분할 (0) | 2020.10.26 |
JQuery Datatables : 정의되지 않은 'aDataSort'속성을 읽을 수 없습니다. (0) | 2020.10.26 |
기본 잠금 화면을 통한 Android 활동 (0) | 2020.10.26 |