我已经尝试了很多东西,并且为这个问题查找了很多地方。Spring 3.0 + REST web服务+ json + xml
我正在尝试使用Spring MVC 3.0进行其他Web服务调用以获取JSON和XML格式的数据。从我所理解的那一刻起,当jackson core和mapper jars出现在类路径中时,Spring会自动将响应转换为jSon,这很好。这在项目中按预期工作。
我在挣扎的是产生一个XML响应。我不知道我必须为此做些什么。我已经尝试了各种方法来设置产生XML响应的方法。根据我的理解,jdk 6及以上版本都有JAXB实现。所以当我使用XML注释标注POJO来生成XML时,它应该给我一个XML响应。但由于某种原因,它一直给我JSON响应。有任何想法吗?以下是我的POJO,它具有XMLRootElement jaxb注释。
package my.dto;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "mydto")
public class MyDTO {
String name;
Long quantity;
String type;
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
@XmlElement
public void setType(String type) {
this.type = type;
}
public Long getQuantity() {
return quantity;
}
@XmlElement
public void setQuantity(Long quantity) {
this.quantity = quantity;
}
public MyDTO(String name, Long quantity) {
this.name = name;
this.quantity = quantity;
}
public MyDTO() {
super();
}
}
**My Controller:**
package my.package;
import java.util.ArrayList;
import java.util.List;
import my.dto.MyDTO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Controller
@RequestMapping("/spring")
public class MyController {
@RequestMapping(value="{b}", method = RequestMethod.GET)
@Produces("application/xml")
public @ResponseBody List<MyDTO> getMyList(@PathVariable String b) {
MyDTO m1 = new MyDTO("My 1", Long.valueOf(100));
MyDTO m2 = new MyDTO("My 2", Long.valueOf(200));
List<MyDTO> list = new ArrayList<MyDTO>();
list.add(m1);
list.add(m2);
return list;
}
}
当我移除和更换@Produces(“应用程序/ XML”)以生产= MediaType.APPLICATION_XML_VALUE),存在错误代码,并将其说“该属性产生未定义的注释类型RequestMapping”。 Spring 3是否有@RequestMapping这个属性?我其实之前也试过这个,之后我将它删除,因为我得到了eclipse编译时错误。非常感谢! – 2014-10-30 07:48:48
猜猜看,这工作,我没有改变@RequestMapping的注释,虽然因为我得到了错误,如前面的评论中所述。我认为问题出在你说得对的指定人。建议4的最后一件事是你已经说过要创建2个方法,一个用于JSON,另一个用于XML。我如何使用webservice url调用正确的方法?如果我有2个方法,我怎样从http URL调用每个URL – 2014-10-30 07:54:13
有趣的是@ @ RequestMapping对于Spring 3的'produce'属性有意义。我很早以前就和Spring 4一起工作。明确地说Spring 3是什么版本正在使用?我想检查API以确认您的问题 – 2014-10-30 12:41:19