Spring REST可以处理所有Content-Type消息

时间:2014-02-04 14:56:31

标签: rest spring-mvc

您能否建议我如何编写处理不同类型“ContentType”消息的Spring REST Web服务?

1.application/json 
2.application/xml 
3.application/x-www-form-urlencoded

在org.springframework.web.servlet.view.ContentNegotiatingViewResolver API的帮助下?

此致 Vasanth D

1 个答案:

答案 0 :(得分:1)

假设您有一个Pizza对象,您可能会这样做。

@Controller
@RequestMapping(value = "pizzas")
public class PizzaController {

    private final PizzaService service;

    @Autowired
    public PizzaController(final PizzaService pizzaService) {
        this.service = pizzaService;
    }


    @RequestMapping(
            method = RequestMethod.POST,
            consumes = {
                MediaType.APPLICATION_JSON_VALUE,
                MediaType.APPLICATION_XML_VALUE,
                MediaType.APPLICATION_FORM_URLENCODED_VALUE
            }
    )
    @ResponseBody
    @ResponseStatus(value = HttpStatus.CREATED)
    public Pizza create(@RequestBody Pizza pizza) {
        return service.create(pizza); 
    }

    @RequestMapping(
            value = "{id}",
            method = RequestMethod.PUT,
            consumes = {
                MediaType.APPLICATION_JSON_VALUE,
                MediaType.APPLICATION_XML_VALUE,
                MediaType.APPLICATION_FORM_URLENCODED_VALUE
            }
    )
    @ResponseBody
    @ResponseStatus(value = HttpStatus.OK)
    public Pizza update(@RequestBody Pizza pizza) {
        return service.update(pizza); 
    }

    @RequestMapping(
            value = "{id}",
            method = RequestMethod.GET,
            consumes = {
                MediaType.APPLICATION_JSON_VALUE,
                MediaType.APPLICATION_XML_VALUE,
                MediaType.APPLICATION_FORM_URLENCODED_VALUE
            }
    )
    @ResponseBody
    @ResponseStatus(value = HttpStatus.OK)
    public Pizza read(@RequestParam("id") Long id) {
        return service.get(id);
    }

    @RequestMapping(
            value = "{id}",
            method = RequestMethod.DELETE,
            consumes = {
                MediaType.APPLICATION_JSON_VALUE,
                MediaType.APPLICATION_XML_VALUE,
                MediaType.APPLICATION_FORM_URLENCODED_VALUE
            }
    )
    @ResponseBody
    @ResponseStatus(value = HttpStatus.OK)
    public Pizza delete(@RequestParam("id") Long id) {
        return service.delete(id);
    }
}

如果您使用的是Spring 4,则可以删除所有@ResponseBody注释,并将@Controller替换为@RestController