[解決済み] エラー 415 Unsupported Media Type: JSONの場合はPOSTがRESTに到達しないが、XMLの場合は到達する
2023-07-09 05:40:21
質問
私はREST WSの初心者なのですが、これがよくわかりません。
415 Unsupported Media Type
.
FirefoxでPosterを使った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>
で、これが私のResourceクラスです。
@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() + "\"}";
}
}
EDIT 1:
これは私のCustomerクラスです。
@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でそれを行う方法を知っていません。
ここにResteasy/Jacksonを使った例があります。 http://www.mkyong.com/webservices/jax-rs/integrate-jackson-with-resteasy/
ジャージも同様です。 http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/
関連
-
mvn' は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
FindBugの使用概要
-
maven レポート エラー 解決不可能な親POM
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
代入の左辺は変数でなければならない 解答
-
java 365*1000*60*60*24 計算問題
-
アクセス制限の解決方法: ---- in Java
-
[解決済み] JSONでHttp 415 Unsupported Media typeエラーが発生した。
-
[解決済み] POST JSONが415 Unsupported media typeで失敗する、Spring 3 mvc
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
Uncaught ReferenceError: は定義されていません。
-
JAVA_HOME環境変数が正しく定義されていない問題を解決する
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
ジャバアレイ
-
FindBugの使用概要
-
Javaがテキストファイルを読み込む
-
Java基礎編 - オブジェクト指向
-
switch case文のcaseの後の列挙定数は列挙型なし