私のコントローラの同じメソッドからXMLとJSON応答を生成しようとしています。 JSONがクラスパス上にあるので、JSONが春のデフォルトであることがわかりました。しかし、XMLでは、JAXBの依存関係を追加し、JAXBアノテーションでモデルに注釈を付ける必要がありました。また、@RequestMappingアノテーションのproduce属性を変更する必要がありました。Spring 4 mvc REST XMLとJSONレスポンス
ここで、私のデフォルトの動作が変更され、XML応答が返されます。 値application/jsonのリクエストにcontent-Typeヘッダーを追加した後、私の応答は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 protected]");
p.setName("Amar");
return p;
}
}
Modelクラス: -
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'
}
}
私が間違って何をやっています? ここのお手伝いが大変ありがとうございます。
おかげで、あなたの要求はapplication/json
に設定Accept
ヘッダが含まれている必要があり、サーバからの応答json
を得るために
JAXBはJDKの一部です。その依存関係を追加する必要はありません。返される内容は、受け取り側のヘッダ(およびその順番)と呼び出し元のURL(.jsonや.xmlなどの拡張も返される内容に影響を与えます)によって決まります。ジャクソンがJAXBアノテーションを理解して、JAXBアノテーションに正しいJAXB依存関係を含める必要があります。 –
ありがとう、私は答えとしてコメントを受け入れることができないので、私は以下を受け入れました。 –