次のメソッドがあります。これは、バックグラウンドで Jackson を使用して、エンティティのリストを json に解析します。
@Controller
@RequestMapping("/user/")
public class EditarLugarController {
@RequestMapping(value = "stores/{id}/branches", method = RequestMethod.GET)
public @ResponseBody List<Branch> renderBranchesPerStore(@PathVariable(value = "id") Integer id) {
if(branches == null) {
//get branches based on store's id
}
return branches;
}
このメソッドは、jquery を使用して ajax を介してビューから呼び出されます
var idBranch = '${store.id}';
$.get("http://localhost:8080/myapp/user/stores/" + idBranch+ "/branches",
function(data) {
// show json objects in page
});
問題は、このメソッドが終了すると、次の例外がスローされることです。
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:639)
@PathVariable を削除してみました(デフォルト値を返します)。問題なく動作しますが、そのパラメーターが必要です。この問題の回避策はありますか?
編集:これは要求されたブランチ コードですが、繰り返しますが、問題に関連しているとは思いません。@PathVariable を使用しないと問題なく動作し、ブランチのリストが json に問題なく解析され、ビューに送信されるためです。また、例外を防ぐために、Jacksonに遅延ロードされた属性を解析しないように指示するHibernate用のJacksonプラグインを使用しています
@Entity
@Table(name = "BRANCH")
public class Branch implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="BRANCH_ID")
@GeneratedValue(strategy= GenerationType.TABLE)
private Integer id;
@Column(name = "DESCRIPTION")
@Size(max = 500)
private String description;
@Column(name="STREET")
@NotNull
@Size(max = 100)
private String street;
@Column(name="NUMBER")
@NotNull
@Size(max = 6)
private String number
@Column(name="FLOOR")
@Size(max = 3)
private String floor;
@Column(name="APT")
@Size(max = 10)
private String apt
@OneToMany(cascade = CascadeType.ALL, mappedBy="branch")
private List<BranchPhoto> photos;
@JoinColumn(name = "STORE_FK", referencedColumnName = "STORE_ID")
@ManyToOne(optional = false)
private Store store;
public Branch() {}
// getters & setters
}
編集: PathVariable がなくても同じ例外が発生することに気付きました。間違ってテストしたに違いありません。したがって、実際の問題は、jsonの解析中の循環参照です