我正在尝试从控制器中的同一方法产生XML和JSON响应。我在Google上搜索,发现JSON是spring的默认值,因为jackson在classpath上。但是对于XML,我必须添加JAXB依赖关系,然后使用JAXB注释对模型进行注释。另外,我必须更改@RequestMapping批注的Produces属性。
现在,我的默认行为已更改,它返回一个XML响应。我以为在将content-Type标头添加到带有值application / json的请求中之后,我的响应将是JSON,但遗憾的是事实并非如此。下面是我的代码:
package com.example.controller; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.example.domain.Person; @RestController("person") public class PersonController { @RequestMapping(name ="getperson", produces = {MediaType.APPLICATION_XML_VALUE,MediaType.APPLICATION_JSON_VALUE}) public Person getPerson() { Person p = new Person(); p.setAge(28); p.setEmail("email@gmail.com"); p.setName("Amar"); return p; } }
型号类别:-
package com.example.domain; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Person { //@XmlElement private String name; //@XmlElement private int age; private String email; public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } public int getAge() { return age; } @XmlElement public void setAge(int age) { this.age = age; } public String getEmail() { return email; } @XmlElement public void setEmail(String email) { this.email = email; } }
生成文件:-
buildscript { ext { springBootVersion = '1.3.6.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'spring-boot' jar { baseName = 'demo' version = '0.0.1-SNAPSHOT' } sourceCompatibility = 1.8 targetCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile('org.springframework.boot:spring-boot-starter-aop') compile('org.springframework.boot:spring-boot-starter-web') compile('javax.xml.bind:jaxb-api:2.2.12') testCompile('org.springframework.boot:spring-boot-starter-test') } eclipse { classpath { containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER') containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8' } }
我究竟做错了什么 ???非常感谢您的任何帮助。
谢谢,
阿玛
为了获得json服务器的响应,您的请求必须包含Accept设置为的标头application/json。
json
Accept
application/json