http://localhost:8888/book/12347という感じのURLでjsonを返したい - Jodd,Madvoc 2015/07/20
2021/03/14


joddです。
ぼくにはむずかしいです。。。(悲哀)
Madvocってなんて読むんですかね?まっどぼっくとか。

軽量な、マイクロフレームワークとかよばれているジャンルだそうです。
が、ぼくにはむずかしいです。

で、アクションの意味が皆目わからず、つぎにRestでなやみ。

とはいいつつも、ドキュメントが読みやすいですね


やりたいことは

http://localhost:8888/book/12347

という感じのURLでjsonを返したいわけです。

jsonとかだと、使う側でいろいろ用意しないといけないようですが(とはいってもたいした労力ではないです)

とりあえず用意したもの

JsonData、JsonResult、Book、BookActionのクラス
package helpers; import jodd.json.JsonSerializer; import jodd.madvoc.meta.RenderWith; @RenderWith(JsonResult.class) public class JsonData { private final JsonSerializer jsonSerializer; private final Object target; public JsonData(Object target) { this.target = target; jsonSerializer = new JsonSerializer(); } public JsonData include(String... includes) { jsonSerializer.include(includes); return this; } public JsonData exclude(String... excludes) { jsonSerializer.exclude(excludes); return this; } public String toJsonString() { return jsonSerializer.serialize(target); } }

package helpers; import java.io.PrintWriter; import javax.servlet.http.HttpServletResponse; import jodd.io.StreamUtil; import jodd.madvoc.ActionRequest; import jodd.madvoc.result.BaseActionResult; import jodd.util.MimeTypes; public class JsonResult extends BaseActionResult<Object> { @Override public void render( ActionRequest request, Object target) throws Exception { // write output HttpServletResponse response = request.getHttpServletResponse(); response.setContentType(MimeTypes.MIME_TEXT_PLAIN); PrintWriter writer = null; try { writer = response.getWriter(); JsonData jsonData = new JsonData(target); writer.println(jsonData.toJsonString()); } finally { StreamUtil.close(writer); } } }

package aaa; public class Book { String name; String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } }

package jodd.example; import aaa.Book; import helpers.JsonResult; import jodd.madvoc.meta.InOut; import jodd.madvoc.meta.MadvocAction; import jodd.madvoc.meta.RestAction; @MadvocAction public class BookAction { @InOut String id; @RestAction(value="${id}", result = JsonResult.class) public Book get() { final Book foo = new Book(); foo.setId(""+id+"b"); return foo; } }

: