83

私は実際にREST WSを初めて使用しますが、実際にはこれがわかりません415 Unsupported Media Type

私は Firefox でポスターを使用して REST をテストしていますがGET、うまく動作します。POSTapplication/xmlapplication/json

これは私の 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() + "\"}";
    }

}

編集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;
    }

}
4

13 に答える 13

21

問題は、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/

于 2012-08-02T08:55:51.560 に答える
3

この問題があり、JacksonFeature クラスを登録していないことが問題であることがわかりました。

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

これを行わないと、アプリケーションは JSON を Java オブジェクトに変換する方法を知りません。

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

于 2014-04-30T18:51:45.610 に答える
0

メソッドで文字列を返さないでください。ただし、Customerはそれ自体に反対し、JAXBに逆シリアル化を処理させます。

于 2012-08-02T08:49:24.530 に答える