3

JAX-RS を使用して RESTful サービスを作成しています。ただし、JSON を要求すると、ブール値はブール値では{"boolValue":"true"}なく、引用符で囲まれた文字列として返されます{"boolValue":true}

シンプルなオブジェクト

@XmlRootElement
    public class JaxBoolTest {
    private boolean working;

    public boolean isWorking() {
        return working;
    }

    public void setWorking(boolean working) {
        this.working = working;
    }

}

シンプルな JAX-RS REST サービス

@Path("/jaxBoolTest")
public class JaxBoolTestResouce {
    @GET
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
    public JaxBoolTest getJaxBoolTest() {
        JaxBoolTest jbt = new JaxBoolTest();
        jbt.setWorking(false);
        return jbt;
    }
}

そして結果:

{"working":"false"}

ブール値を文字列ではなくブール値として取得するにはどうすればよいですか?

4

3 に答える 3

3

jaxson ( http://jackson.codehaus.org/ ) を使用してこれをシリアル化すると、すぐに使用できます。

public class BooleanTest {
    @Test
    public void test() throws Exception{
        System.out.println(new ObjectMapper().writeValueAsString(new JaxBoolTest()));
    }
}

この出力を生成しました:

{"working":false}

JSON のシリアル化には Jackson を使用することを強くお勧めします。それはうまくいきます。過去に Jettison を使用したことがありますが、多くの問題がありました。jackson を使用するように jax-rs プロバイダーを構成する必要があるでしょう。既に使用しているようには見えないからです。

別のヒント: 同じ Bean を使用して jax-b xml も提供する場合を除き、jackson を使用する場合は @XmlRootElement は必要ありません。

于 2013-02-12T23:20:37.043 に答える
3

私の場合、JSON 出力はすべてのプロパティを文字列 (プリミティブ データ型を含む) として表示していました。これを私の web.xml に追加すると、問題が解決しました。

<init-param>
  <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
  <param-value>true</param-value>
</init-param>
于 2013-03-01T16:57:28.927 に答える
0
@POST @Path("/users")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Object controlUserExisting(Object requestEntity) {
    boolean result=RootBsn.controlUserExisting(requestEntity);

    JSONObject json=new JSONObject();
    json.put("result",result);

    return json.toString();
}

ユーザーの既存の送信済みおよび返された {"result":true} を取得しています (存在する場合)

于 2015-07-15T07:32:35.993 に答える